Как создать файл с отображением в памяти без файла поддержки в OSX? - PullRequest
3 голосов
/ 01 сентября 2010

Я хочу использовать библиотеку, которая использует файловые дескрипторы в качестве основного средства для доступа к своим данным.Из соображений производительности я не хочу каждый раз фиксировать файлы на диске перед использованием функций этой библиотеки.

Я хочу создавать (большие) большие двоичные объекты данных на лету и вызывать библиотеку, чтобыотправить их на сервер.В настоящее время я должен записать файл на диск, открыть его, передать FD в библиотеку, дождаться его завершения, а затем удалить файл на диске.Так как я могу воссоздавать большие двоичные объекты по требованию (и они не настолько велики, чтобы вызывать чрезмерную подкачку виртуальной памяти), сохранение их на диск ничего не покупает и приводит к значительному снижению производительности.Можно ли назначить FD блоку данных, который находится только как отображенный в памяти объект?

1 Ответ

4 голосов
/ 01 сентября 2010

Вы можете смонтировать файловую систему с поддержкой памяти : http://lists.apple.com/archives/darwin-kernel/2004/Sep/msg00004.html

Использование этого механизма увеличит нагрузку на память системы и, вероятно, будет выгружено, если давление памяти достаточно велико,Возможно, стоит сделать это параметром конфигурации, если пользователь предпочитает, чтобы какое-то другое приложение выбрало память в первую очередь.

Другой вариант - использовать сегменты разделяемой памяти POSIX :http://opengroup.org/onlinepubs/007908799/xsh/shm_open.html (Я сам не использовал сегменты разделяемой памяти POSIX; если я правильно их понял, они были предназначены именно для решения этой проблемы.)

Функция shm_open() создает объект памяти ивозвращает дескриптор файлаЗатем вы можете mmap(2) этот дескриптор файла, выполнить свою работу и передать дескриптор файла в библиотеку.

Не забудьте shm_unlink объект, когда вы закончите;Сегменты общей памяти POSIX, очереди сообщений и массивы семафоров не исчезают автоматически при выходе из последнего процесса.

...