william

Keep Calm and Markdown.

c++ 内存对齐

我们在设计结构体时,需要慎重考虑内存对齐的问题,因为不同的内存对齐方式对程序的性能有极大的影响。

CPU 读取内存的最小有效值

计算机的内存是按照 byte(8 bits) 进行有序排序,理论上,我们可以在最小有效值为 1 byte 进行随机内存读取。然而,如果每次都是按照这个节奏,每取一个 int(假设为 4byte) 变量,CPU 都需要进行 4 次操作,毫无疑问效率极低。

我们知道 CPU 架构有 32bit64bit 两种,其含义是在 CPU 每次从内存地址取值时,是以对应最小有效内存地址进行快速操作的。简单讲

  • 对于 32bit,最优操作为每次取 4 byte 的内存空间进行识别
  • 对于 64bit,最优操作为每次取 8 byte 的内存空间进行识别

现在的操作系统一般都是 64bit 了,所以每次的最佳取内存地址为 8byte,这也是我们经常说的,内存对齐按照 8byte,也是编译器 gcc 默认采用的大小。

1
#pragama pack(8)
0%