系统内存对齐

Posted 镜花水月小朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统内存对齐相关的知识,希望对你有一定的参考价值。

1. 在32位系统中定义变量最好用int,因为这样效率高。原因就在于32位的系统本身配合内存等也是32位,这样的硬件配置天生适合定义32位的int类型变量,效率最高。也能定义8位插入型和16位short型变量,但实际上访问效率不高。

2. 在很多32位系统中,我们实际定义了bool类型变量(实际上使用1个bit就够了)都是用int来实现的bool的,也就是说我们定义一个bool类型时,编译器实际上帮我们分配了32位内存来存储这个bool变量。编译器实际上浪费了31位内存,但好处是效率高。

3. 内存单元是以字节为单位的。

 

内存地址对齐是计算机语言自动进行的,也即是编译器所做的工作。但这不意味着我们程序员不需要做任何事情,因为如果我们能够遵循某些规则,可以让编译器做得更好,毕竟编译器不是万能的。

为了更好理解上面的意思,这里给出一个示例。在32位系统中,假如一个int变量在内存中的地址是0x00ff42c3,因为int是占用4个字节,所以它的尾地址应该是0x00ff42c6,这个时候CPU为了读取这个int变量的值,就需要先后读取两个word大小的块,分别是0x00ff42c0~0x00ff42c3和0x00ff42c4~0x00ff42c7,然后通过移位等一系列的操作来得到,在这个计算的过程中还有可能引起一些总线数据错误的。但是如果编译器对变量地址进行了对齐,比如放在0x00ff42c0,CPU就只需要一次就可以读取到,这样的话就加快读取效率。

以上是关于系统内存对齐的主要内容,如果未能解决你的问题,请参考以下文章

go 内存对齐

操作系统的内存对齐机制学习笔记

4096个字节是4K对齐了吗?

ARM嵌入式系统为什么要做内存对齐

ARM嵌入式系统为什么要做内存对齐

Visual Studio2008 C++结构体成员需要内存对齐吗?