关于c中的__alignof结构

时间:2011-03-16 17:40:14

标签: c alignment

  

__alignof值是对齐方式   中最大元素的要求   结构。

为什么?

3 个答案:

答案 0 :(得分:3)

你从哪里得到报价?如果你明白地解释它,那是完全错误的。例如:

struct s
{
    char array[100];
    long x;
}

显然,结构的对齐方式是x而不是array。该规则应为:

  

结构的对齐方式与对齐最高的元素相同。

现在,对于真正的问题,为什么结构必须具有这种对齐?好吧,想象一下你有一个结构并访问其中的成员。如果结构的对齐比嵌入式成员少,那么访问成员可能会以未对齐的方式完成,这通常会从底层硬件触发运行时错误。

答案 1 :(得分:1)

因为内存子系统无法获取与任何地址对齐的任何数据。

一条数据的自然边界是这样的

address % sizeof(x) == 0

这样,您就不必为一个数据总线提取中的元素执行两次数据总线提取。

__alignof返回最大项目的对齐方式与如果最大项目对齐的想法有关,那么较小的项目将打包到对齐指南中,因为它们小于最大项目的边界

答案 2 :(得分:0)

使用大多数编译器使用的默认结构布局规则,填充将插入到您的结构中,以便结构中的每个字段都具有本机对齐 - 即,每个字段等于或大于目标的本机字大小机器被放在一个单词边界上。确保布局正确进行,需要将整个结构对齐到相同的数量。

你没有说出你正在使用什么编译器,但听起来它比对象更需要对齐对象。无论如何,__alignof文档只是让你知道在将结构传递给它时会返回什么。