通过本文主要向大家介绍了data alignment,straighten,straighten out,straighten up,straighten是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
为了速度和正确性,请对齐你的数据.
概述:对于所有直接操作内存的程序员来说,数据对齐都是很重要的问题.数据对齐对你的程序的表现甚至能否正常运行都会产生影响.就像本文章阐述的一样,理解了对齐的本质还能够解释一些处理器的"奇怪的"行为.
内存存取粒度
程序员通常倾向于认为内存就像一个字节数组.在C及其衍生语言中,char * 用来指代"一块内存",甚至在JAVA中也有byte[]类型来指代物理内存.
Figure 1. 程序员是如何看内存的
然而,你的处理器并不是按字节块来存取内存的.它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存.我们将上述这些存取单位称为内存存取粒度.
Figure 2. 处理器是如何看内存的
高层(语言)程序员认为的内存形态和处理器对内存的实际处理方式之间的差异产生了许多有趣的问题,本文旨在阐述这些问题.
如果你不理解内存对齐,你编写的程序将有可能产生下面的问题,按严重程度递增:
程序运行速度变慢
应用程序产生死锁
操作系统崩溃
你的程序会毫无征兆的出错,产生错误的结果(silently fail如何翻译?)
内存对齐基础
为了说明内存对齐背后的原理,我们考察一个任务