相关疑难解决方法(0)

C++对齐 - 严格和弱

我正在阅读N3485 C++标准草案,在有关对齐的部分中,它说明了以下内容:

3.11对齐[basic.align]

1 ...对齐是一个实现定义的整数值,表示可以分配给定对象的连续地址之间的字节数.对象类型对该类型的每个对象强制对齐要求; 可以使用对齐说明符(7.6.2)请求更严格的对齐.

在这里它说明了什么是对齐,我得到了.这意味着如果你有32位(4字节)系统,它将一次读取4字节大小的块,所以你应该把内存放在4字节偏移地址的内存中.很多这都是由一个好的编译器处理的,但是C++也让你有发言权.

它所说的对齐说明符是alignas.

您可以传递一个整数来alignas指定对齐要求或类型alignas(double)

现在,您有弱或严格对齐,声明如下:

5对齐有从弱到强或更严格的 对齐的顺序.更严格的对齐具有更大的对齐值.满足对齐要求的地址也满足任何较弱的有效对齐要求.

7比较比对是有意义的,并提供了明显的结果:

- 当数值相等时,两个对齐相等.

- 当数值不相等时,两个对齐方式不同.

- 当对齐比另一个大时,它表示更严格的对齐.

所以这里指出更严格的对齐是更大的对齐.这只是意味着alignas(8)比这更严格alignas(4)吗?在32位(4字节)系统上,8版本意味着该int类型需要两次读取而不是一次读取,而一次只需要填充.严格意义上指的是当对齐被"误用"时,它会给CPU带来潜在的开销,就像在这个愚蠢的例子中一样?

我意识到并非所有对齐在给定系统上都是有效的,并且扩展对齐必须是有效的才能产生正确的行为.

对我而言,对齐是让CPU以字大小块的形式访问内存数据,这是CPU从内存中获取和写入数据的最佳方式.

据我所知,这种严格的调整可能会毁了这一点.我错了吗?什么是严格对齐与弱对齐?

c++ strict alignment c++11

11
推荐指数
1
解决办法
635
查看次数

标签 统计

alignment ×1

c++ ×1

c++11 ×1

strict ×1