0
涉及什麼數學,我如何判斷兩個地址是否在同一個4千字節頁中?如何判斷兩個地址是否在同一個頁面文件中?
涉及什麼數學,我如何判斷兩個地址是否在同一個4千字節頁中?如何判斷兩個地址是否在同一個頁面文件中?
好吧,假設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);
}
這將讓醜陋很快,因爲網頁上有共同的架構可變大小,以及特定內存區域的頁面大小和將被改變運行中的操作系統取決於應用程序內存使用模式。
(請注意,存儲器頁虛擬內存而不是物理內存。嚴格地說,它沒有意義談論物理頁面,當有人說「物理頁面」,他們說「身體雖然我們通常所理解內存對應一頁「。)