关于自然对齐
1. 首先什么是cache line? cache line就是处理器从RAM load/store数据到CPU cache所使用的数据线。
2. 什么是对齐:有些人说,address of data % sizeof(data type)==0 就是对齐,其实这不准确,全面的理解它必须从CPU为什么需要对齐,不对齐就会造成数据访问花费额外的时钟周期,和额外的指令(编译器或OS附加的),并且数据经过更长的路径,比如pipeline才能到达CPU(从RAM)。这就是对齐问题。这里的重点是 数据的起始地址 & 数据的大小。
P4极其之后的处理器,cache line(缓存线)宽度是64字节,
1. 内存的访问如果没有按照64字节边界对齐(例如:每次访问 -读/写在Addr%64!=0就是没对齐),就可能会造成两次cache line split内存访问,和多个upos的执行。
所以一个原则就是,总是对齐数据在操作数大小的地址边界(按照操作数自身的大小进行对齐),如果内存被访问通过矢量指令(解指针引用的内存访问,如, mov ecx, DWORD PTR [ebx], 或 st4 [r8]=r9 (这是IA64指令)。这样的访问不会超过16字节(80位浮点数,或128位long long,在64位系统),那么在16字节边界对