【发布时间】:2012-02-03 02:20:36
【问题描述】:
涉及哪些数学运算,如何判断两个地址是否在同一个 4 KB 页面中?
【问题讨论】:
标签: memory memory-management paging pagefile
涉及哪些数学运算,如何判断两个地址是否在同一个 4 KB 页面中?
【问题讨论】:
标签: memory memory-management paging pagefile
好吧,假设 4 KiB 页面,
#include <stdint.h>
bool same_page(const void *x, const void *y)
{
uintptr_t mask = ~(uintptr_t) 4095;
return ((uintptr_t) x & mask) == ((uintptr_t) y & mask);
}
这将很快变得丑陋,因为页面在常见架构上具有可变大小,并且特定内存区域的页面大小可以并且将由操作系统根据应用程序内存使用模式动态更改。
(注意内存页是虚拟内存而不是物理内存。严格来说说物理页是没有意义的,虽然我们通常理解当有人表示“物理页面”,它们的意思是“对应于页面的物理内存”。)
【讨论】: