我需要从现有的 64 位值中提取一个内存地址,该地址指向一个 4K 数组,起始值为:
0x000000030c486000
我需要的地址存储在位 51:12 中,因此我使用以下方法提取这些位:
address = start >> 12 & 0x0000007FFFFFFFFF
这给我留下了以下地址:
0x000000000030c486
但是,我正在阅读的文档指出,存储在该地址的数组大小为 4KB,并且自然对齐。
我对自然对齐的实际含义有点困惑。我知道对于页面对齐的东西,地址通常以“000”结尾(尽管我可能错了)。
我假设从起始值获取的地址只有 40 位长,我需要执行额外的位移操作来排列这些位,以便可以进一步正确解释它们。
如果有人可以就此提供一些建议,我将不胜感激。
谢谢