0

涉及什么数学,我如何判断两个地址是否在同一个 4 KB 页面中?

4

1 回答 1

2

好吧,假设 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);
}

这将很快变得丑陋,因为页面在常见架构上具有可变大小,并且特定内存区域的页面大小可以并且将由操作系统根据应用程序内存使用模式动态更改。

(注意,内存页是虚拟内存,不是物理内存。 严格来说,说物理页是没有意义的,虽然我们通常理解,当有人说“物理页”时,他们的意思是“对应于一个页的物理内存”。)

于 2012-02-03T05:21:34.493 回答