table of contents
GETPAGESIZE(2) | Руководство программиста Linux | GETPAGESIZE(2) |
ИМЯ¶
getpagesize - определяет размер страницы памяти
ОБЗОР¶
#include <unistd.h>
int getpagesize(void);
Требования
макроса
тестирования
свойств
для glibc (см.
feature_test_macros(7)):
getpagesize():
- Начиная с glibc 2.12:
-
_BSD_SOURCE ||
!(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) -
До glibc 2.12: _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
ОПИСАНИЕ¶
Вызов getpagesize() возвращает количество байтов в странице памяти, где «страница» представляет собой блок фиксированной длины, единица измерения при выделения памяти и файлового отображения, выполняемого с помощью mmap(2).
СООТВЕТСТВИЕ СТАНДАРТАМ¶
SVr4, 4.4BSD, SUSv2. В SUSv2 вызов getpagesize() отмечен как УСТАРЕВШИЙ, и был удалён из POSIX.1-2001; в HP-UX такого вызова нет.
ЗАМЕЧАНИЯ¶
В переносимых программах вместо getpagesize() следует использовать sysconf(_SC_PAGESIZE):
#include <unistd.h> long sz = sysconf(_SC_PAGESIZE);
(большинство систем позволяют использовать _SC_PAGE_SIZE вместо _SC_PAGESIZE.)
В Linux системный вызов getpagesize() есть не на всех архитектурах. Если он есть, то он возвращает символ ядра PAGE_SIZE, чьё значение зависит от архитектуры и модели компьютера. Как правило, создаваемые двоичные файлы используются для всей архитектуры, а не для конкретной одной модели. Поэтому рекомендуется определять PAGE_SIZE не на стадии компиляции из файла заголовка, а при выполнении программы с помощью данной функции, по крайней мере на тех архитектурах (таких как sun4), где зависимость от модели существует. В этом случае в библиотечные вызовы из libc4, libc5, glibc 2.0 завершатся неудачно, так как их getpagesize() возвращает статически определённое значение, и не использует системный вызов. В glibc 2.1 это исправлено.
СМОТРИТЕ ТАКЖЕ¶
2010-11-16 | Linux |