如何知道實際結構尺寸? 使用sizeof返回對齊後的字節數。 例如:實際結構尺寸
struct s {
char c;
int i
}
sizeof(s)= 8; 我有興趣獲得沒有對齊的字節大小,即5
如何知道實際結構尺寸? 使用sizeof返回對齊後的字節數。 例如:實際結構尺寸
struct s {
char c;
int i
}
sizeof(s)= 8; 我有興趣獲得沒有對齊的字節大小,即5
的sizeof返回實際的結構尺寸。
沒有填充的大小有點沒有意義,因爲編譯器會插入感覺合適的填充。一些編譯器支持關閉結構填充的編譯指示,在這種情況下,您應該使用它,但您可能會發生各種有趣的事情。
結構的實際大小是對齊後結構的大小。我的意思是sizeof
返回內存中結構的大小。如果你想有一個按字節對齊的結構,你應該告訴編譯器這樣做。例如這樣的事情:
#ifdef _MSVC
# pragma pack(push)
# pragma pack(1)
# define PACKED
#else
# define PACKED __attribute((packed))
#endif
struct byte_aligned {
char c;
int i;
} PACKED;
#ifdef _MSVC
# pragma pack(pop)
#endif
現在sizeof(byte_aligned)
回5及其在記憶裏卻5字節
同樣的事情,我已經提到:這實際上會包裝結構,我們不能確定,OP想要這個。他/她可能只想檢索「真實」的大小,沒有任何填充,沒有包裝。 –
真正的大小是'sizeof'返回的大小,我的意思是'sizeof'返回一個我可以使用的大小:'pStruct = new an_struct [2]; char * p =(char *)pStruct; p + = sizeof(an_struct); ((an_struct *)p) - > i = 0;'它應該總是有效的,所以'sizeof'返回實際大小,你的意思是預期的大小,我認爲我的結構的大小,但實際大小是填充後的大小 – BigBoss
這就是爲什麼我把'real'放在引號中:)而且我提到_'沒有任何填充,沒有打包'_。我知道'sizeof'的作用和它給出的尺寸。 –
您誤解了文檔。
使用的sizeof對準
這是不正確之後返回的字節數。 sizeof
返回填充後的字節數,這不是一回事。
因此,如果你想知道的是「我的結構需要多少空間」,sizeof()
告訴你正確的答案。
出於好奇,你爲什麼需要這個? – hansmaad
可能會關閉對齊(VS中的編譯指示包(1)),然後計算sizeof(s) – marcinj
我同意Kiril的觀點,因爲它的問題不清楚,也不知道OP試圖實現什麼,很可能會脫離目標。我們需要拭目以待... –