我有點失去了對計算結構的大小尺寸結構和變量
所以我們有結構:
struct AcronymNode{
struct AcronymNode* next;
char acronym[5];
double num_phrases;
struct The_Phrase* phrase_list;
} Dictionary;
我認爲這是
next : 4bytes
acronym: 5bytes + 3
num_phrases: 8bytes
phraselist: 4bytes
=24 bytes
當我看在筆記它說:32個字節= 4 + 5 + 3(取向到 字)+ 4(用於對準雙)+ 8 + 4 + 4(到下一個結構對齊的8的倍數爲 的鬥BLE)
爲什麼我們對準添加額外的8,因爲它之前的第2個結構
在更高效的結構後,雙和4不溢,4它具有雙重第一,以下爲結構24個字節
此外,我想檢查,如果這是正確的
structT{
int a;
char b[5];
float c;
char d[2];
};
是對大小4 + 5 + 3 + 4 + 4 = 20?
出於性能原因添加了對齊。如果你不需要它,使用__attribute __((packed))(gcc/clang)。另外,編譯器不會爲你重新排序字段,這是你的責任。 – oakad
這個維基百科頁面是添加填充的原因的一個很好的來源:http://en.wikipedia.org/wiki/Data_structure_alignment。 x86架構上有很好的例子。 – slaadvak
這是由編譯器試圖對齊對象以匹配適合於類型的地址邊界造成的。看看[C結構中的內存對齊](http://stackoverflow.com/questions/5435841/memory-alignment-in-c-structs)。 –