記憶體對齊(自然對齊)

2021-05-25 01:49:41 字數 434 閱讀 5690

參考:

今天與超,暉,棟,宇幾人論此問題,終得以下結論,不知正確與否,姑且記下。

對於32位機,cpu的記憶體讀寫週期是4word,所以在記憶體對齊時,皆以此填滿。

如:struct a

char a;

double b;

char c;

sizeof(a)=4+8+4=16;

struct b

char a;

double b;

char c;

char d;

sizeof(b)=4+8+4=16;

然仍覺得不踏實,因為沒有官方的說明,遂網查,稍有理解(謝謝石頭兄!

不過按照那個理解,似乎還是有些說不通,對他舉的那個例子是可行的,可對我上面所舉的例子行不通,姑且先這樣吧,迫不及待

把這些寫下來了,稍後理解了再繼續,==。

自然對齊(記憶體位址)

c 中 基本資料型別的變數不能簡單的儲存於記憶體中的任意位址,他們的起始位址必須能被他們的大小整除。typedef unsigned char byte enum color struct eigth double m price color m color bool m isshift bool ...

自然對齊和強制對齊

一 自然對齊 各個型別自然對齊,即其起始記憶體位址必須是其型別本身的整數倍。對於結構體來說,結構體的起始記憶體位址,必須是結構體中成員最大長度型別的整數倍。結構體自然對齊應遵守如下規則 1 資料成員對齊規則 應該是sizeof 成員變數型別 或者sizeof 成員變數型別 的倍數。應該是子結構體中最...

struct自然對齊和指定對齊

intel 微軟等公司曾經出過一道類似的面試題 include pragma pack 8 struct example1 struct example2 pragma pack int main int argc,char argv 答案是 816 4解釋 程式中第2行 pragma pack 8...