Общая память 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, который не создает резервную копию с любым дисковым файлом.