Skip to content

Alignment ​

直接看例子 int x 一般来说在常见的 x86-64 环境中 ——

C++
sizeof(int)  == 4
alignof(int) == 4

说明存储这个类型的对象需要四个字节(使用 sizeof 关键字); 而借助 alignof 说明这个类型的对象要求其起始地址满足多大的对齐, 此处是 4, 通常意味着

C++
address % 4 == 0

也就是说对于什么 0x1000, 0x1004, 0x100C 比较适合存储 int 类型变量. 于此同时, 对于 0x1003 这样的就不合适, 因为不满足四个字节的对齐.

这很 CPU —— 为了告诉访问, 它一般不是一个一个字节来进行访问, 而是一次 2 / 4 / 8 / 16 字节等以一个单位来进行访问. 所以如果没有对齐整数倍的话, 可能会涉及到跨数据块的访问, 那么就需要设计到拼接等操作, 使得拖慢访问速度.

那么假设极端一点, 涉及到跨 Cache Line 甚至是跨页进行访问, 就会使得效率更低.

结构体 / 类 的 padding —— tailing padding 也是类似的道理, 等有机会了重新整理这两篇罢

Released under the MIT License.