Да, это зависит от платформы. В Linux есть sysconf(_SC_PAGESIZE)
, который также выглядит как POSIX. Типичная библиотека C реализует это, используя вспомогательный вектор. Если по какой-то причине у вас нет библиотеки C или вспомогательного вектора, вы можете определить размер страницы следующим образом:
size_t get_page_size(void)
{
size_t n;
char *p;
int u;
for (n = 1; n; n *= 2) {
p = mmap(0, n * 2, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (p == MAP_FAILED)
return -1;
u = munmap(p + n, n);
munmap(p, n * 2);
if (!u)
return n;
}
return -1;
}
Это тоже POSIX, я думаю. Это зависит от наличия некоторой свободной памяти, но для этого нужны только две последовательные страницы. Это может быть полезно в некоторых (странных) обстоятельствах.