作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要从现有的64位值中提取一个内存地址,这个地址指向一个4K的数组,起始值为:
0x000000030c486000
我需要的地址存储在位 51:12 中,因此我使用以下方法提取这些位:
address = start >> 12 & 0x0000007FFFFFFFFF
这给我留下了地址:
0x000000000030c486
但是,我正在阅读的文档指出存储在该地址的数组大小为 4KB,并且自然对齐。
我对自然对齐的实际含义有点困惑。我知道对于页面对齐的内容,地址通常以“000”结尾(尽管我可能错了)。
我假设由于从起始值获取的地址只有 40 位长,我需要执行额外的位移操作来排列这些位,以便它们可以进一步正确解释。
如果有人可以就此提供一些建议,我将不胜感激。
谢谢
最佳答案
通常,“自然对齐”意味着任何项目至少对齐到其自身大小的倍数。例如,4 字节对象与 4 的倍数地址对齐,8 字节对象与 8 的倍数地址对齐,等等。
对于一个数组,你通常不会看整个数组的大小,而是看数组中某个元素的大小。
同样,对于 struct
或 union
,您通常会查看最大元素的大小。
关于c - 自然对齐的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503537/
我是一名优秀的程序员,十分优秀!