c sizeof整齐对齐?

时间:2016-06-21 02:05:02

标签: c sizeof

嗨我明白C标准在执行sizeof时需要内存对齐。但我不太明白为什么甚至整数数组都需要对齐。请参阅以下示例:

options =
  token: process.env.HUBOT_SLACK_TOKEN
  autoReconnect: !exitProcessOnDisconnect
  autoMark: true
  exitOnDisconnect: exitProcessOnDisconnect
  proxyUrl: process.env.https_proxy

输出为16,因为#include <stdio.h> struct flexarray { int a[2]; double f; }; int main(int argc, char** argv) { printf("sizeof (struct flexarray) = %zu\n", sizeof (struct flexarray)); return 0; } = 4且sizeof(int) = 8.这很好。

但当我将a更改为sizeof(double)时输出为24这不是我的预期,因为根据我的计算结果应为20(= 3 x 4 + 8)。

我能想到的唯一解释是编译器添加了填充整数,但我不明白为什么会发生这种情况:int[3]为12,它毕竟是4字节的倍数。

我正在使用gcc编译32位Linux。

sizeof(int[3])

有人可以告诉我为什么好吗?

1 个答案:

答案 0 :(得分:3)

如果使用offsetof检查类成员的位置,您可能会发现编译器希望{8}字符边界上的double值对齐。