打印
[boot]

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

[复制链接]
807|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒋博1026|  楼主 | 2019-8-22 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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、从内存编址看数组的意义
数组可以看作就是内存的一部分,把内存抠出来一部分,就可以当成一个数组来看。

使用特权

评论回复

相关帖子

沙发
秋雨绵绵| | 2019-10-8 09:45 | 只看该作者
多谢多谢,对新手来说,简直太明了了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1820

帖子

18

粉丝