C 中的記憶體對齊

2021-06-05 05:59:52 字數 420 閱讀 2505

c++的一道題

#include "iostream"

#include "string"

using namespace std;

//#pragma pack(1)

struct student

stu;

struct s

s;void main()stu;

結構體對齊:

最後的偏移位址25不是4的倍數,填充3個位元組後,滿足條件。

故該結構體長度為28

另外需要注意的是每個特定平台上的編譯器都有自己的預設「對齊係數」(也叫對齊模數)。程式設計師可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一係數,其中的n就是你要指定的「對齊係數」。

通過該預編譯命令指定的對齊係數不需要上面的規則來判斷對齊係數。

C 中的記憶體對齊

記憶體對齊 在我們的程式中,資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。我們還是先來看一段簡單的程式 程式一 1 include 2using namespace std 34 structx15 1011struct...

C 中的記憶體對齊

在我們的程式中,資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。我們還是先來看一段簡單的程式 程式一 1 include iostream 2using namespace std 34 structx15 1011str...

c 中的記憶體對齊

32bit,x86環境,vs2010 struct test 對其執行sizeof test 得到值為32,並且我們對裡面每個變數取sizeof,確實是所屬型別的大小,但為什麼不是1 4 1 8 1 15呢,我們執行下面 來計算每個變數之間的位址偏移量 test t cout sizeof t en...