首页 > 其他 > 详细

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

时间:2019-11-20 13:08:25      阅读:83      评论:0      收藏:0      [点我收藏+]

内存编址方式

1.内存在逻辑上就是一个一个的格子,这些格子可以用来装东西,也就是内存中的数据,每个格子都有一个固定的编号,这个编号0、1、2、3就是
内存地址,这个内存地址(一个数字)和这个格子的空间是一一对应的并且是永久绑定的。这就是内存的编址方式
2.在程序运行时,CPU只认识内存地址,而不关心这个地址所代表的空间在哪里以及分布,因为硬件的设计保证了只要有地址,就一定能找到这个盒子在
哪里,所以内存单元有两个概念:地址和空间
3.内存编址是以字节为单位,每一个内存地址对应的内存大小的空间是固定的,就是一个字节8bit

内存寻址方式

1.逻辑地址:包含在机器语言指令中用来指定一个操作数或者一条指令的地址
2.线性地址(也称虚拟地址):是一个32位无符号整数,可以用来表示高达4G的地址,通常使用16进制数来表示,范围从0x00000000到0xffffffff
3.物理地址:用于内存芯片级内存单元寻址,他们从微处理器的地址引脚发送到内存总线上的电信号相对应。物理地址由32位或36位无符号整数表示

MMU

MMU内存管理单元)的功能是将逻辑地址转换为物理地址,其中包括:
1.分页单元,将逻辑地址转换为线性地址
2.分页单元,将线性地址转换为物理地址

内存对齐

typedef abc{
    char a;
    short b;
    int c;
}

typedef my{
    char a;
    int c;
    short b;
}

sizeof(abc)=8而sizeof(my)=12????为什么会产生这种问题呢

技术分享图片

为什么要字节对齐

1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

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

原文:https://www.cnblogs.com/hyxk/p/11896393.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!