Из (Linux, специфичные) man shmget
:
новый сегмент разделяемой памяти, с размером, равным значению размера округляется до кратного PAGE_SIZE, создается, если ключ имеет значение IPC_PRIVATE
или клавишу не IPC_PRIVATE
, сегмент разделяемой памяти, соответствующий клавише, существует, а IPC_CREAT
указан в shmflg.
PAGE_SIZE
определяется при компиляции ядра и на x86 обычно составляет 4 KiB. Используйте sysconf(_SC_PAGESIZE)
(или getpagesize()
, когда переносимость не является проблемой), чтобы получить правильное значение в байтах при запуске программы.
Однако, даже если распределение будет фактически больше, вы не должны использовать больше, чем запрашиваемый размер разделяемой памяти, поскольку POSIX позволяет реализациям выделять память точного размера, и поэтому это поведение может измениться в более поздней версии.
Я рекомендую использовать общую память POSIX. См. [Shm_overview (7)] (http://man7.org/linux/man-pages/man7/shm_overview.7.html) .... –