Я реализую постоянные большие постоянные массивы через mmap. Есть ли советы и трюки или gotchas, которые следует знать при использовании mmap?mmaping большие файлы (для постоянных больших массивов)
ответ
Все указатели, которые хранятся внутри области mmap'd, должны выполняться как смещения от основания области mmap'd, а не как реальные указатели! Вы не обязательно получите один и тот же базовый адрес, когда вы нажмете регион на следующий прогон программы. (Мне пришлось очистить код, который сделал неправильные предположения о постоянстве адресного адреса mmap region).
Обязательно проверьте наличие ограничений на размер открытого файла или использование памяти. В Linux есть встроенная команда оболочки ulimit. Запустите как ulimit -a
, чтобы просмотреть текущие настройки.
Flush записывает в массив памяти в файл с помощью системного вызова msync (2), иначе они могут оставаться в памяти до munmap (2), и может произойти перерыв в электропитании или что-то еще до этого!
Если несколько процессов имеют одинаковые области памяти, разделяемые с привилегиями чтения и записи, убедитесь, что за один раз записывается только одно, чтобы не повредить ваши данные. Или используйте блокировку файлов или некоторые другие средства синхронизации.
Это самый прямой вариант использования для mmap(), поэтому вам не должно быть много, чтобы вас тронуть.
Вы фактически просто загружаете большой постоянный массив. Будучи постоянными, вам не нужно беспокоиться о синхронизации. Было бы желательно убедиться, что параметр prot установлен в PROT_READ только с тех пор, как вы не будете писать.
Если одна или несколько программ, использующих константы, будут постоянно выполняться, может быть целесообразно иметь отдельную программу, которая загружает данные и сохраняет их. Запуск других программ, по сути, просто выполняет добавление разделяемой памяти, а не постоянно считывает файл в память.
- 1. Большие меню для больших экранов
- 2. Общие большие файлы PST для тестирования больших данных
- 3. сканирование для больших массивов
- 4. Объединить большие файлы
- 5. mmaping две последовательные страницы
- 6. Точность numpy.mean для больших массивов
- 7. префиксное сканирование для больших массивов
- 8. Функция сортировки для больших массивов
- 9. Запись больших динамических массивов/объектов в текстовые файлы журнала
- 10. Большие массивы массивов PHP
- 11. swfbridge и большие файлы
- 12. Загрузить большие файлы с Paperclip
- 13. pydev позволяет складывать большие файлы
- 14. Сортировка действительно больших массивов проблема?
- 15. умножение больших массивов в python
- 16. Spring MVC: большие файлы для скачивания, OutOfMemoryException
- 17. Как обрабатывать большие файлы excel?
- 18. Как обрабатывать большие текстовые файлы?
- 19. Загрузите большие файлы Google-накопителей
- 20. Сравнение больших массивов
- 21. Создание больших массивов
- 22. Заполнение больших массивов numpy
- 23. Хранение и чтение больших массивов
- 24. Передача больших массивов клиенту
- 25. Сортировка 2 больших массивов
- 26. Связывание больших массивов в D3
- 27. HttpURLConnection и загрузить большие файлы
- 28. как обрабатывать большие XML файлы
- 29. Загрузить большие файлы на RoR
- 30. Цифровая гистограмма больших массивов
Промывка не требуется, поскольку данные постоянны. –