字节对齐

  • 一般计算机架构中都会有地址总线和数据总线, 地址总线一般决定了机器可访问内存的大小, 比如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的倍数就行.
  • 对于不同的处理器, 当寻址不满足字节对齐要求时所造成的结果也不同. 有的会引发总线异常导致系统崩溃, 有的不会引发异常但是会造成访问性能降低, 有的会读取到错误的数据, 造成数据失真.
  • 关于 如何自定义对象的字节对齐方式?这里
阅读更多
版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/qq_31504597/article/details/79958994
文章标签: 字节对齐
个人分类: 计算机基础
上一篇C语言之联合与变体记录
下一篇如何自定义对象字节对齐方式?
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭