Какая математика вовлечена и как определить, находятся ли два адреса на одной странице в 4 килобайта?Как узнать, находятся ли два адреса в одном файле?
0
A
ответ
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);
}
Это становится уродливым быстро, поскольку страницы имеют переменный размер общей архитектуры, а также размер страницы конкретного региона памяти может и будет изменен операционная система «на лету» в зависимости от использования патчей использования памяти приложений.
(Обратите внимание, что страницы памяти являются виртуальной памяти и не физической памяти. Строго говоря, это не имеет смысла говорить о физических страниц, хотя обычно мы понимаем, когда кто-то говорит, что «физическая страница» они означают «физическое память, соответствующая странице ".)