涉及什么数学,如何判断两个地址是否在同一个4千字节的页面中?
答案 0 :(得分: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);
}
由于页面在常见体系结构上具有可变大小,因此很快就会变得难看,并且操作系统可以并且将根据应用程序内存使用模式动态更改特定内存区域的页面大小。
(请注意,内存页面是虚拟内存而不是物理内存。严格来说,谈论物理页面没有意义,尽管我们通常会了解某人他说“物理页面”是指“与页面对应的物理内存”。)