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