Как мне узнать, находятся ли два адреса в одном файле подкачки? - PullRequest
0 голосов
/ 03 февраля 2012

Какая математика используется, и как я могу узнать, находятся ли два адреса на одной странице размером 4 килобайта?

1 Ответ

2 голосов
/ 03 февраля 2012

Ну, если предположить, что 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);
}

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

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

...