簡體   English   中英

找到未對齊結構的正確大小

[英]Finding the correct size of a misaligned structure

 typedef struct structA 
{
   char        C;
   double      D;
   int         I;
} structA_t;

此structA_t結構的大小:

sizeof(char)+ 7字節填充+ sizeof(double)+ sizeof(int)= 1 + 7 + 8 + 4 = 20字節

但這是錯誤的,正確的是

24

為什么?

目前最有可能是最后一次后4個字節的填充ìnt

如果sizeof(double) == 8則可能在您的平台上alignof(double) == 8 考慮這種情況:

structA_t array[2];

如果size只有20,則array[1].D將不對齊(地址可以被4整除,而不是8,這是必需的對齊)。

char = 1個字節

double = 8個字節

int = 4個字節

對齊double =>

padding char => 1+7 

padding double => 8+0

padding int => 4+4

=> 24個字節

或者,簡單地說,是最大的倍數=> 3(字段數)* 8(最大的大小)= 24

我的猜測是你的系統中int的大小是4字節,所以int也必須填充4字節,以實現8字節的字大小。

total_size=sizeof(char) + 7 Byte padding + sizeof(double) + sizeof(int) + 4 Bytes padding = 24 Bytes

關於填充/對齊的好文章: http//www.drdobbs.com/cpp/padding-and-rearranging-structure-member/240007649

由於雙成員,它強制所有內容都是八字節對齊的。

如果你想要一個更小的結構,那么下面的結構只給你16個字節!

typedef struct structA 
{
   int         I;
   char        C;
   double      D;
} structA_t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM