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、从内存编址看数组的意义
数组可以看作就是内存的一部分,把内存抠出来一部分,就可以当成一个数组来看。