Как стать автором
Обновить

Комментарии 3

Добавьте: если работа идёт не долгим пережёвыванием фрагментов, а доступом в самые разные места массива данных, лучше memmap() ничего не будет. И, если памяти много — работать будет предельно быстро, потому что алгоритмы ровно те, которые обеспечивают виртуальную память в операционке. Они заоптимизированы по самое немогу.

Если памяти мало — работать будет всё равно, но будет тормозить.
Если же нужно, чтобы при нехватке памяти всё умирало (бывает нужно и так) — тогда другие методы, да.
Механизмы что обеспечивают отображение файла в память процесса (memmap) — ровно теже что обеспечивают paging/swapping для работы ОС с виртуальной памятью

это очень удобно для программиста — у него есть базовый адрес и все данные просто доступны по индексу или смещению от него

но нужно помнить об особенностях архитектуры и используемой ОС
в 32х битном режиме вы не спожете спроецировать в память процесса ЕМНИП больше 2х Гб, в 64х-битном — намного больше (терабайты)

первое обращение к данным — всегда медленное т.к. вызывает загрузку с диска

данные грузятся блоками по 4к (или стдандартный для ОС размер страницы памяти)

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