由于数据对齐,我能否保证任何数据结构的大小都可以被 int
的大小整除?我没有找到有关如何在编译前猜测数据结构大小的信息。
最佳答案
一般来说,你不能做出这样的假设:
如果
sizeof(int) == 1
,则所有结构的大小都是sizeof(int)
的倍数。一些 DSP 芯片就是这种情况。否则,在绝大多数架构上,大小可以是任意的,例如
struct A { char c; 的大小
可能是1
,它不是sizeof(int)
的倍数。如果该结构确实有一个不是位域的
int
成员,并且没有显式或隐式声明为打包,带有编译器特定扩展,您可以假设它的大小是_Alignof(int)
的倍数并且其自身的对齐至少与_Alignof(int)
一样大。对于任何成员类型(位域除外)都是如此。请注意,它不一定使大小成为sizeof(int)
的倍数。请参阅 this answer 中通常如何确定结构对齐方式作者:Eric Postpischil。
另请参阅 why does size of the struct need to be a multiple of the largest alignment of any struct member .
关于c - 任何数据结构的大小都可以被 int 的大小整除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64078171/