如何判断两个地址是否在同一个页面文件中?

发布于 2025-01-02 05:15:08 字数 39 浏览 0 评论 0原文

涉及什么数学以及如何判断两个地址是否位于同一个 4 KB 页中?

What math is involved and how do I tell if two addresses are in the same 4 kilobyte page?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷爱 2025-01-09 05:15:08

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

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

(请注意,内存页是虚拟内存,而不是物理内存。严格来说,谈论物理页是没有意义的,尽管当有人说“物理页”时我们通常会理解页”,它们的意思是“对应于一页的物理内存”。)

Well, assuming 4 KiB pages,

#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);
}

This will get ugly quickly since pages have a variable size on common architectures, and the page size of a particular region of memory can and will be changed by the operating system on the fly depending on application memory usage patters.

(Note that memory pages are virtual memory and not physical memory. Strictly speaking, it does not make sense to talk about physical pages, although we usually understand when someone says "physical page" they mean "physical memory corresponding to a page".)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文