Я не верю, что сегмент разделяемой памяти System V влияет на размер страницы.Это функция конфигурации ОС и ЦП.См. Также Каков размер страницы общей памяти? и друзей.
В Linux вы можете позвонить getpagesize(2)
, чтобы определить размер страницы:
#include <unistd.h>
int size = getpagesize();
Вы также можете позвонить sysconf(3)
:
#include <unistd.h>
long size = sysconf(PAGESIZE);
Хотя одна вещь ... Glibc не может определить размер страницы.Вам следует проверить, что size>0
и size
кратны 2
.Относитесь ко всему остальному, как к ошибке, и используйте размер страницы по умолчанию:
#include <unistd.h>
long size = sysconf(PAGESIZE);
if (size <= 0)
size = 4096;
Хотя -1
является ошибкой, у меня в PowerPC были возвращены фиктивные возвращаемые значения Glibc, например 0
вместо сбоя, дляразмер строки кэша (размер строки кэша равен 64 или 128; никогда не равен 0).Также см. Ошибка 0014599, sysconf (_SC_LEVEL1_DCACHE_LINESIZE) возвращает 0 вместо 128 .
Также см. Как рассчитать размер общей памяти, доступной для системы , гдедругое поддельное значение возвращается в системах Red Hat.