我正在阅读N3485 C++标准草案,在关于对齐的部分中,它说明了以下内容:
3.11对齐[基本对齐]
1.
对齐是一个实现定义的整数值,表示
给定对象可以被分配的连续地址之间的字节数。对象类型将对齐要求强加给该类型的每个对象;
可以使用对齐说明符请求更严格的对齐
(7.6.2).
在这里,它说明了什么是对齐,我明白了。这意味着,如果您有32位(4字节)系统,它将一次读取4字节大小的块,所以您应该将内容放在内存中的4字节偏移地址处。很多这些都是由一个好的编译器处理的,然而C++也让你在其中有发言权。
它所说的对齐说明符是
alignas
.
您可以将整数传递给
阿利纳斯
指定对齐要求或类似类型
alignas(double)
现在,您有弱对齐或严格对齐,声明如下:
5路线的订单来自
弱到强或更严格
路线。
越严格的路线值越大。
一
满足对齐要求的地址也满足任何
较弱的有效对准要求。
7比较路线是有意义的,并提供了明显的结果:
当两条路线的数值相等时,它们是相等的。
当两条路线的数值不相等时,它们是不同的。
当一条路线比另一条路线大时,表示路线更严格。
因此,这里它指出,更严格的对齐就是更大的对齐。这只是意味着
alignas(8)
比
alignas(4)
? 在32位(4字节)系统上,8版本意味着
int
类型将需要两次读取而不是一次,并且一次只需要填充。严格的指的是这样一个事实吗?当对齐被“滥用”时,它会给CPU带来潜在的开销,就像这个愚蠢的例子一样?
我意识到,并不是所有的对齐在给定的系统上都是有效的,扩展的对齐必须是有效的才能产生正确的行为。
对我来说,对齐是让CPU以字大小的块访问内存数据,这是CPU向内存获取数据和向内存写入数据的最佳方式。
据我所知,这种严格的结盟可能会破坏这一点。我错了吗?什么是严格对齐与弱对齐?