【问题标题】:structure padding for charcter [duplicate]字符的结构填充[重复]
【发布时间】:2014-05-11 15:05:36
【问题描述】:
    struct struct_name {
                        char a;
                        char b;
                        char c;
     }

结构体struct_name的大小是3但是

   struct struct_name1 {
   char a;
   char b;
   char c;
   int d;
   char e;
   char f;
   char g;
};

struct_name1 的大小是 12 为什么? 我知道这是因为填充,但为什么结构 stuct_name 的大小是 3,为什么结构 struct_name1 的 sizeof 不是 11。

【问题讨论】:

标签: c struct padding


【解决方案1】:

这一切都取决于平台,但假设一个相对正常的环境具有 32 位 ints 需要在 32 位边界上对齐,您需要该结构是 4 字节大小的倍数。否则,如果您尝试创建一个 struct_name1 数组,则中间的 int 将无法正确对齐(数组中的元素之间不能有填充)。

如果编译器将该结构设置为 11,则其中两个的数组将如下所示:

abcXddddefgabcXddddefg  // X is padding
0   4   8   C  F        // hex offset

您会看到第二个int d 的第一个字节位于偏移量 0x0F 处,即 15 - 不是 4 字节对齐的。因此添加了一个额外的填充字符:

abcXddddefgXabcXddddefgX  // X is padding
0   4   8   C   0   4     // hex offset

而中间的int 将始终具有正确的对齐方式。

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 2018-07-11
    • 2019-08-13
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2011-05-27
    • 2021-07-28
    • 2011-08-13
    相关资源
    最近更新 更多