Если мне нужно переместить умеренный объем памяти между двумя процессами, я могу сделать следующее:
- создать файл для записи
- ftruncate до нужного размера
- mmap и отсоедините его
- используйте по желанию
Когда другому процессу требуются эти данные, он:
- подключается к первому процессу черезсокет unix
- первый процесс отправляет fd файла через сообщение сокета unix
- mmap, который fd
- использует по желанию
Thisпозволяет нам перемещать память между процессами без какой-либо копии - но созданный файл должен находиться в файловой системе, смонтированной в памяти, в противном случае мы можем получить удар по диску, что приведет к снижению производительности.Есть ли способ сделать что-то подобное без использования файловой системы?Malloc-подобная функция, которая возвращает fd вместе с указателем, сделает это.
[ Edit ] Наличие дескриптора файла обеспечивает также механизм подсчета ссылок, который поддерживается ядром.