gpt4 book ai didi

c sizeof 整数对齐方式?

转载 作者:行者123 更新时间:2023-11-30 18:37:15 25 4
gpt4 key购买 nike

嗨,我知道 C 标准在执行 sizeof 时需要内存对齐。但我不太明白为什么即使是整数数组也需要对齐。请参阅我的以下示例:

#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;
}

输出为 16,因为 sizeof(int) = 4 且 sizeof(double) = 8。这很好。

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

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

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

Linux 93c9e1096795 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

谁能告诉我为什么?

最佳答案

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

关于c sizeof 整数对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37934464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com