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

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

1.内存的编址方法

  • 内存在逻辑表示为一个一个的格子,而每个格子都有一个编号,这个编号就是内存地址。内存地址(一个数字)和这个格子空间一一对应,永久绑定。
  • 程序运行时,计算机cpu只认识内存地址,而不关心这个地址所代表的空间在哪里,怎么分配等问题。因为硬件设计保证了按照地址能够找到对应的格子。内存单元的2个概念:地址和空间是内存单元的两个方面。

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

  • 如果把内存比作大楼,那么一个个房间就是内存格子。其中格子的大小是固定的,即8bit。

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

  • c语言中的基本数据类型:char short int long float double
    int(整数类型,这个整就体现在它和CPU本身的数据位宽是一样的)

  • 数据类型和内存的关系在于:数据类型是用来定义变量的,而这些变量需要存储、运算在内存中。所以数据类型必须要和内存相匹配。否则可能效率低下。

  • 在32位系统中定义变量最好用int,因为这样效率高。原因就是32位的系统本身配合内存也是32位。这样的硬件配置天生适合定义32位的int类型变量。其他类型变量定义效率不高。

  • 在很多32位环境下,我们实际定义bool类型变量。(实际只需要1bit就够了)都是用int来实现bool。 bool
    b1;编辑器其实帮我们分配了32位的内存来存储这个bool变量b1,编译器这么做实际上浪费了31位的内存,但是效率高。

4.内存对齐

  • 在C中定义一个int类型变量,在内存中就必须分配4个字节来存储这个a。那么有两种不同的内存分配思路和策略:
    第一种:0 1 2 3 对齐访问
    第二种:1 2 3 4或者 2 3 4 5 或者 3 4 5 6 非对齐访问
  • 逻辑上怎么存放都没有关系,所以内存的对齐不是逻辑问题,是硬件问题。从硬件角度上来说, 32位的内存0 1 2 3四个单元在硬件设计当初就是一个整体,这4个字节组合起来当做一个int,硬件效率就很高。例如,在酒店里,房间编号1 2 3 4看是连续的,但是实际上不一定连续,有可能到头后从新到另一边开始编号。因为兼容性问题,一般硬件也都是提供非对齐访问,但是效率要低很多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值