自然对齐的内存地址

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位长,我需要执行额外的位移操作来排列位,以便可以进一步正确解释它们.

如果有人可以就这样做提出一些建议,我会很感激.

谢谢

Jer*_*fin 5

通常,“自然对齐”意味着任何项目至少对齐其自身大小的倍数。例如,一个 4 字节的对象与一个 4 的倍数的地址对齐,一个 8 字节的对象与一个 8 的倍数的地址对齐,等等。

对于数组,您通常不会查看整个数组的大小,而是查看数组元素的大小。

同样,对于structor union,您通常会查看最大元素的大小。