蒋博1026 发表于 2019-8-22 11:30

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

1、内存编址方法(1)、内存在逻辑上就是一个一个的小格子,这些格子可以用来装东西,也就是内存中存储的数据,每个格子都有一个编号,这个编号(下图中的0 123 ......)就是内存地址,这个内存地址(一个数字)和这个格子的空间(实质是一个空间)是一一对应的并且是永久绑定的。这就是内存的编址方法。https://img2018.cnblogs.com/blog/1448545/201908/1448545-20190813152049768-1313061402.png
(2)、在程序运行时,CPU只认识内存地址,而不关心这个地址所代表的空间在哪里以及怎么分布这些实体问题。因为硬件的设计保证了只要有地址,就一定能找到这个格子在哪里,所以说内存单元有两个概念:地址和空间2、关键:内存编址是以字节为单位的  每个内存地址对应的内存大小的空间是固定的,就是一个字节(8bit)3、内存和数据类型的关系C语言中基本的数据类型有:char   short    int      long   float    doubleint整型(这个整就体现在它和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位内存 它 0123四个单元本身逻辑上就有相关性,这四个字节组合起来当作一个int硬件上就是合适的,效率就高。所以说,对齐访问很配合硬件,效率高;非对齐访问因为和硬件本身不搭配,所以效率不高。5、从内存编址看数组的意义数组可以看作就是内存的一部分,把内存抠出来一部分,就可以当成一个数组来看。

秋雨绵绵 发表于 2019-10-8 09:45

多谢多谢,对新手来说,简直太明了了
页: [1]
查看完整版本: 内存编址与寻址、内存对齐