2012-02-03 3 views

ответ

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

Это становится уродливым быстро, поскольку страницы имеют переменный размер общей архитектуры, а также размер страницы конкретного региона памяти может и будет изменен операционная система «на лету» в зависимости от использования патчей использования памяти приложений.

(Обратите внимание, что страницы памяти являются виртуальной памяти и не физической памяти. Строго говоря, это не имеет смысла говорить о физических страниц, хотя обычно мы понимаем, когда кто-то говорит, что «физическая страница» они означают «физическое память, соответствующая странице ".)