gpt4 book ai didi

c++ - 具有单个 char 数组成员的结构是否保证具有可预测的大小?

转载 作者:行者123 更新时间:2023-12-02 15:53:14 25 4
gpt4 key购买 nike

考虑以下结构:

struct alignas(8) Foo {
char data[8];
};

标准是否保证 sizeof(Foo) == 8

从外行的角度来看,这应该是正确的,因为 8 个 char 不需要任何填充来对齐 8。在 GCC、Clang 和 MSVC (live demo) 上的实践中似乎是正确的。

但是,填充和对齐是一项棘手的工作,我找不到任何信息严格禁止实现添加无关的填充 - 即 sizeof(Foo) == 16 也可能吗?

到目前为止,我发现了以下内容:

  • sizeof(char[8]) == 8 得到保证 ( see here ),因此 sizeof(Foo) >= 8)
  • Foo 没有前导填充,因为它是标准布局类型 ( see here )
  • 至少有一个知识渊博的人 - std::bit_cast 的作者 - 显然相信没有填充 - see this article

(有趣的是,如果这个事实不是真的,这似乎暗示结构可以有任意大的大小,这有点奇怪。)

最佳答案

实现可以根据需要自由添加尽可能多的填充。类型的大小被限制为其内容的最小大小,但这就是标准所要求的。

我不能真正指出不存在的东西,所以我不能链接到标准中没有施加限制的部分。

从广义上讲,实现不会对类型的大小做奇怪的事情。 ABI 要求可能会限制实现。但就标准本身而言,并没有这样的要求。

关于c++ - 具有单个 char 数组成员的结构是否保证具有可预测的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71895789/

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