gpt4 book ai didi

c++ - 对于所有对象类型 T,sizeof(T) >= alignof(T) 是否总是如此?

转载 作者:IT老高 更新时间:2023-10-28 12:29:16 29 4
gpt4 key购买 nike

对于任何对象类型 T,是否总是 sizeof(T) 至少与 alignof(T) 一样大?

直觉上似乎是这样,因为即使您调整对象的对齐方式,例如:

struct small {
char c;
};

在正常情况下,它们的“大小”也向上调整,以便数组中对象之间的关系在保持对齐的同时有意义(至少在我的 testing 中。例如:

struct alignas(16) small16 {
char c;
};

大小和对齐方式均为 16。

最佳答案

至少在标准 C++ 中,对于任何可以创建数组(长度 > 1)的东西,都必须是这样。如果你有

Foo arr[2];

alignof(Foo) > sizeof(Foo),那么 arr[0]arr[1] 不能同时是对齐。

作为 Zalman Stern's example但是,至少有一些编译器允许您声明一个对齐大于其大小的类型,结果编译器根本不允许您声明该类型的数组。这不是符合标准的 C++(它使用类型属性,即 are a GCC extension),但这意味着您可以在实践中使用 alignof(T) > sizeof(T)

数组参数假定 sizeof(Foo) > 0,对于标准支持的任何类型都是如此,但 o11c shows编译器扩展破坏该保证的示例:一些编译器允许 0 长度数组,其中 0 sizeof 和正 alignof

关于c++ - 对于所有对象类型 T,sizeof(T) >= alignof(T) 是否总是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46457449/

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