我有一個9字節值的成員結構。該結構的sizeof()返回爲10.我假設額外的字節是由於填充。 是否允許填充字節用於任何事情,還是編譯器「保留」它?也就是說,就程序而言,內存是否永遠丟失?填充結構內存使用情況
問題的原因是我的空間非常短缺,所以我使用位操作在一個字節中使用了其中一個成員來存儲多個值。然而,如果填充的字節從未被另外使用,我可以通過在不增加結構的整體大小的情況下具有額外的字節值來代替填充的字節來降低訪問位操縱的字節中的至少一個值的複雜度。 但如果可能,我寧願回收填充的空間用於其他變量。助教。
typedef struct node {
struct node * sibling, *child; // 2 * 2 bytes
char * name; // 2 bytes
handle callback; // 2 bytes
uint16_t properties; // 1 byte
} node; // total by members = 9 bytes
totalSizeOfnode = sizeof(node); //totalSizeOfNode = 10
您可以在結構的末尾添加一個「char」字段,並在其中存儲任何您想要的內容。它不會改變'sizeof'或內存需求。但是你的田地長度真的很奇怪。 'sizeof uint_16t should == 2',並且,根據平臺的不同,'sizeof void * should == 4 or 8' –
爲什麼你認爲uint16_t的大小是1字節? – urzeit
它在我目前正在使用的uC上執行:) – Toby