c - 任何数据结构的大小都可以被 int 的大小整除吗?

标签 c

由于数据对齐,我能否保证任何数据结构的大小都可以被 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/

相关文章:

c - 在 C 中实现 hmac sha1

c - 在 C 中交换结构中的两个数组元素

c - snprintf 无法按预期使用 avr-gcc

c - 实现换行的不同方式

c - 二叉树 -- 求深度为 k 的节点数

c - 为什么调用 sbrk(0) 两次会给出不同的值?

c - 多维阵列打印给出了不同的东西

c - Swift:无法将函数指针转换为 (void*) 以便在 C 风格的第三方库中使用

objective-c - 从枚举派生字符串的方法

c - 如何确保分配缓冲区在内存中