我知道double
与8字节的边界对齐,因为这对浮点指令更有帮助。但是为什么long long
也对齐了一个8字节的边界呢?
发布于 2015-01-09 14:59:25
最有可能的解释是,硬件架构在8字节对齐时提供更快的long long
读写。
对于记录,使double
类型8字节对齐的推理是相同的。实际的浮点运算是使用寄存器来注册指令的.内存对齐与寄存器注册操作无关。内存对齐只与涉及内存读和写的指令的性能有关。
发布于 2015-01-09 15:49:42
一个可能的解释是long long
和double
变量都是8字节长的。当您不将它们对齐到一个8字节的边界时,如果一个变量在页面结束之前启动了3个字节,并在下面的页面中保留了5个字节,那么它们可能会跨越两页内存。这可能会导致性能开销,因为读取该变量可能需要获取两页内存(写入该变量将修改两页内存而不是一页内存)。here还讨论了其他低级别的性能含义。
https://stackoverflow.com/questions/27870573
复制