Общая память Posix и сопоставленные файлы

узнав немного о предмете, может ли кто-нибудь сказать, в чем реальная разница между общей памятью POSIX (shm_open) и сопоставленными файлами POSIX (mmap)?

оба, похоже, используют подсистему /dev/tmpfs, а не более старый механизм IPC.

Итак, есть ли какое-либо преимущество использования файла mmap над общей памятью?

спасибо.

3 ответов


различие не всегда ясно. Общая память может быть реализована через отображаемые в память файлы. отличная запись об этом можно найти здесь (применительно к программированию на C/C++).


Я понимаю, что эта общая память построена поверх сопоставленных файлов, но На Этой Странице кажется, указывает на то, что возможность использовать сопоставленные с памятью файлы в качестве общей памяти является условной.

использование функции mmap () ограничено системным значением QSHRMEMCTL. Если это системное значение равно 0, функция mmap () может не создавать общее сопоставление с возможностью PROT_WRITE. По сути, это предотвращает создание карты памяти может изменить содержимое отображаемого файла потока. Если параметр flags указывает MAP_SHARED, параметр prot указывает PROT_WRITE, а системное значение QSHRMEMCTL равно 0, то функции mmap () завершатся ошибкой и число ошибок результатов EACCES.


в основном общая память является формой IPC.Общая область создается в /dev / shm, которая создается только в памяти(RAM) и не требует операций на диске, следовательно, это более быстрый метод IPC.Хотя IPC можно сделать с помощью файла диска, а затем с помощью mmap тоже, но это будет сравнительно медленно.В качестве альтернативы вы всегда можете использовать MAP_ANONYMOUS с mmap, который не создает резервную копию с любым дисковым файлом.