内存编址和寻址、内存对齐

1、内存编址方法

(1)、内存在逻辑上就是一个一个的小格子,这些格子可以用来装东西,也就是内存中存储的数据,每个格子都有一个编号,这个编号(0 1  2  3 ……)就是内存地址,这个内存地址(一个数字)和这个格子的空间(实质是一个空间)是一一对应的并且是永久绑定的。这就是内存的编址方法。

(2)、在程序运行时,CPU只认识内存地址,而不关心这个地址所代表的空间在哪里以及怎么分布这些实体问题。因为硬件的设计保证了只要有地址,就一定能找到这个格子在哪里,所以说内存单元有两个概念:地址和空间

2、关键:内存编址是以字节为单位的

每个内存地址对应的内存大小的空间是固定的,就是一个字节(8bit)

3、内存和数据类型的关系

C语言中基本的数据类型有:char   short    int      long     float    double

int  整型(这个整就体现在它和cpu本身的数据位宽是一样的),例如32位的cpu,int就是32位。

数据类型与内存的关系就在于:

数据类型是用来定义变量的,而这些变量需要存储、运算在内存中。所以数据类型必须和内存相匹配才能获得最好的性能,负责就有可能不工作或者是效率低。

在32位操作系统中定义变量最好用int,因为这样效率高。

4、内存对齐

我们在C中定义一个int类型的变量,在内存中就必须分配4个字节来存储这个变量。就有两种不同的分配思路和策略:

第一种就是:  0  1  2  3                      对齐访问

第二种就是:  1  2  3  4或  2  3  4  5或 3  4  5  6          非对齐访问

内存的对齐访问不是逻辑问题,是硬件问题。从硬件角度来说,32位内存 它 0  1  2  3四个单元本身逻辑上就有相关性,这四个字节组合起来当作一个int硬件上就是合适的,效率就高。

所以说,对齐访问很配合硬件,效率高;非对齐访问因为和硬件本身不搭配,所以效率不高。

5、从内存编址看数组的意义

数组可以看作就是内存的一部分,把内存抠出来一部分,就可以当成一个数组来看。

发表评论