Как мне создать файл сопоставленного на память без заднего файла на OSX?

StackOverflow https://stackoverflow.com/questions/3616189

Вопрос

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

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

Можно ли присвоить FD к блоку данных, которые находятся только в качестве карта памяти?

Это было полезно?

Решение

Вы могли бы установить файловая система: http://lists.apple.com/Чахивы/darwin-kernel/2004/sep/msg00004.html.

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

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

То shm_open() Функция создает объект памяти и возвращает дескриптор файла. Вы могли бы тогда mmap(2) Этот файл дескриптор, выполните вашу работу и передайте дескриптор файла в библиотеку.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top