參考:
今天與超,暉,棟,宇幾人論此問題,終得以下結論,不知正確與否,姑且記下。
對於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...