Ton*_*ony 5 c memory binary bit-shift
我需要从现有的64位值中提取内存地址,该地址指向4K数组,起始值为:
0x000000030c486000
Run Code Online (Sandbox Code Playgroud)
我需要的地址存储在位51:12中,所以我使用以下方法提取这些位:
address = start >> 12 & 0x0000007FFFFFFFFF
Run Code Online (Sandbox Code Playgroud)
这留给我的地址:
0x000000000030c486
Run Code Online (Sandbox Code Playgroud)
但是,我正在阅读的文档指出,存储在该地址的数组大小为4KB,并且自然对齐.
我对自然对齐实际意味着什么有点困惑.我知道页面对齐的东西,地址通常以'000'结尾(虽然我可能错了).
我假设从起始值取得的地址只有40位长,我需要执行额外的位移操作来排列位,以便可以进一步正确解释它们.
如果有人可以就这样做提出一些建议,我会很感激.
谢谢
通常,“自然对齐”意味着任何项目至少对齐其自身大小的倍数。例如,一个 4 字节的对象与一个 4 的倍数的地址对齐,一个 8 字节的对象与一个 8 的倍数的地址对齐,等等。
对于数组,您通常不会查看整个数组的大小,而是查看数组元素的大小。
同样,对于structor union,您通常会查看最大元素的大小。