内存访问并非以字节为单位

发布时间 2024-01-05 10:17:08作者: deeplearnMs
虽然 C++ 认为每个字节都是可以独立访问的,但计算机会通过获取更大块的数据来补偿缓
慢的内存速度。最小型的处理器可以每次从主内存中获取 1 字节,桌面级处理器则可以立
即获取 64 字节。一些超级计算机和图形处理器还可以获取更多。
C++ 获取一个多字节类型的数据,比如一个 intdouble 或者指针时,构成数据的字
节可能跨越了两个物理内存字。这种访问被称为非对齐的内存访问unaligned memory
access。此处优化的意义在于,一次非对齐的内存访问的时间相当于这些字节在同一个字
中时的两倍,因为需要读取两个字。C++ 编译器会帮助我们对齐结构体,使每个字段的起
始字节地址都是该字段的大小的倍数。但是这样也会带来相应的问题:结构体的“洞”中
包含了无用的数据。在定义结构体时,对各个数据字段的大小和顺序稍加注意,可以在保
持对齐的前提下使结构体更加紧凑。