首页 > 其他分享 >字节对齐问题

字节对齐问题

时间:2022-11-02 00:12:22浏览次数:36  
标签:读取 0x0004 起始 问题 地址 对齐 CPU 字节

概念:

  CPU每一次读取数据是按照固定起始地址字节长度读取的

  比如32位(4字节)的CPU读取起始地址为0x0000,那么其读取数据地址顺序应该是0x0000~0x0003,然后0x0004~0x0007

  当有个4字节数据存储在0x0002~0x0005上,即起始地址为0x0002,为了读取完整,CPU需要分别读取0x0000~0x0003和0x0004~0x0007,这样一个字节的数据读取就进行了两个字节的CPU读取,效率低且浪费资源。

  假如该数据存储为0x0000或0x0004甚至0x0008,CPU只需要分别以0x0000或0x0004或0x0008为起始地址读取一次即可,不难看出,其由CPU的固定起始地址数据存放起始地址相对位置有关,其量化表示可为:数据存放起始地址能被字节长度所整除,则效率最大化。如例子中0x0002 % 4 = 2,明显不整除,而如果数据存储在如0x0004或0x0008为起始地址,则可以整除。

 

操作(这里仅讨论向下对齐):

   使用“与”操作抹去相对高位。如0d0033即0b00100001,对于4字节对齐则与上~(0x0003)即抹除不到整4的值,得到0d0032;对于8字节对齐则与上~(0x0007)即抹除不到整8的值,得到0d0032,以此类推

 

 

参考:

  https://blog.csdn.net/Demondai999/article/details/121640212

  http://t.zoukankan.com/grooovvve-p-14158927.html

标签:读取,0x0004,起始,问题,地址,对齐,CPU,字节
From: https://www.cnblogs.com/toriyung/p/16849553.html

相关文章