gpt4 book ai didi

c++ - 为什么打包对象的 sizeof 低于预期?

转载 作者:太空狗 更新时间:2023-10-29 20:34:43 26 4
gpt4 key购买 nike

我有以下代码:

#pragma pack(push, 4)

class C {
public:
char a;
char b;
short c;
char d;
};
C e;

我不明白为什么 sizeof(e) 是 6。我认为 sizeof(e) 将是 8 => 1(a) + 1(b) + 2(c) + 1(d) + 3(用于对齐)

最佳答案

Packing 指令设置对齐的上限,而不是最小值。 C 的对齐要求只有 2,因此将对齐上限降低到 4 对其没有影响。

如果你打算增加对齐,你可以使用 alignas 来代替(这恰好是一个标准特性,不像 packing)。

but still, why the padding is to number divide by 2 and not power of 2?

因为对象的大小只需要是该对象的对齐方式的倍数。对齐必须是 2 的幂。

关于c++ - 为什么打包对象的 sizeof 低于预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719252/

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