概念:
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