__alignof值是对齐方式 中最大元素的要求 结构。
为什么?
答案 0 :(得分:3)
你从哪里得到报价?如果你明白地解释它,那是完全错误的。例如:
struct s
{
char array[100];
long x;
}
显然,结构的对齐方式是x
而不是array
。该规则应为:
结构的对齐方式与对齐最高的元素相同。
现在,对于真正的问题,为什么结构必须具有这种对齐?好吧,想象一下你有一个结构并访问其中的成员。如果结构的对齐比嵌入式成员少,那么访问成员可能会以未对齐的方式完成,这通常会从底层硬件触发运行时错误。
答案 1 :(得分:1)
因为内存子系统无法获取与任何地址对齐的任何数据。
一条数据的自然边界是这样的
address % sizeof(x) == 0
这样,您就不必为一个数据总线提取中的元素执行两次数据总线提取。
__alignof返回最大项目的对齐方式与如果最大项目对齐的想法有关,那么较小的项目将打包到对齐指南中,因为它们小于最大项目的边界
答案 2 :(得分:0)
使用大多数编译器使用的默认结构布局规则,填充将插入到您的结构中,以便结构中的每个字段都具有本机对齐 - 即,每个字段等于或大于目标的本机字大小机器被放在一个单词边界上。确保布局正确进行,需要将整个结构对齐到相同的数量。
你没有说出你正在使用什么编译器,但听起来它比对象更需要对齐对象。无论如何,__alignof
文档只是让你知道在将结构传递给它时会返回什么。