字节对齐

  • 一般计算机架构中都会有地址总线和数据总线, 地址总线一般决定了机器可访问内存的大小, 比如8086PC有20条地址总线, 可访问的内存为2的20次方共1048576个字节(1MB); 数据总线则决定了机器单次读写可处理数据的大小, 8086CPU有16条数据总线, 每次可传送给CPU的数据大小最多为16位(2Byte).
  • 通常我们所说的 “计算机是64位的” “32位的系统” 等指的是机器的数据总线的条数.
  • 一般对于32位机器来说, 处理器一次可访问 1Byte(8Bit) 2Byte(16Bit) 4Byte(32Bit).

字节对齐 指的是当处理器访问单个字节时, 对访问的起始地址不作要求; 当访问多个 (n个) 字节时, 要求所访问的起始地址满足 n 的倍数.

下图显示了一个32位机器如何正确的访问内存.
字节对齐

注意:

  • 内存对齐并不是说要访问多少字节就要求起始地址为多少的整数倍, 比如在32位机器上要访问8字节, 由于32位机器一次最多访问4字节, 所以8字节就会拆分为两个4字节分两次访问, 起始地址只要是4的倍数就行.
  • 对于不同的处理器, 当寻址不满足字节对齐要求时所造成的结果也不同. 有的会引发总线异常导致系统崩溃, 有的不会引发异常但是会造成访问性能降低, 有的会读取到错误的数据, 造成数据失真.
  • 关于 如何自定义对象的字节对齐方式?这里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值