【问题标题】:C/C++: Packing or padding data in a structC/C++:在结构中打包或填充数据
【发布时间】:2012-04-02 06:29:31
【问题描述】:

我正在使用带有 GNU GCC 编译器的 Code::Blocks IDE。

struct test
{
    char a;
    char e;
    char f;
    char b;
    char d;
};

sizeof(test) 返回5

我读了这个答案: Why isn't sizeof for a struct equal to the sum of sizeof of each member?

为什么最后一个char后面没有padding,所以sizeof(test)返回6或者8?一旦我添加了shortint 等,我可以问更多的问题。但我认为这个问题现在很好。填充不会使处理器更容易使用结构吗?

【问题讨论】:

    标签: c++ c padding


    【解决方案1】:

    char 的对齐方式只有 1,因此无需填充结构以满足更大的对齐要求。

    【讨论】:

    • 好的,假设我的字长是 4 个字节。假设我有一个数组test stuff[1000]。我的处理器读取单个tests,如char-char-char-char char-pad-pad-pad。内存中的数组是不是也需要这样格式化?
    • @newprogrammer 否。它将是 5000 字节,数组成员之间没有填充,结构成员。
    • @newprogrammer:您的结构中没有“单词”,因此“单词”所需的对齐方式无关紧要。
    • @newprogrammer:不,不会。 char 对齐为 1 的全部含义是处理器不期望它对齐,因此没有必要或理由对其进行填充。
    【解决方案2】:

    由于大多数时候您一次只使用一个成员,或者传递结构的地址,因此编译器并不关心整个结构的对齐方式超过其成员所需的对齐方式。这意味着如果您分配此结构(或将其传递给函数),处理器将必须逐个成员地读取它。 (而且会有点慢)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-25
      • 2014-03-29
      • 1970-01-01
      • 2023-04-03
      • 2011-10-21
      • 1970-01-01
      • 2014-10-12
      • 2018-02-14
      相关资源
      最近更新 更多