Используете файл подкачки для кеширования? - PullRequest
1 голос
/ 21 сентября 2010

Мне приходится иметь дело с огромным количеством данных, которые обычно не помещаются в основную память. Способ доступа к этим данным имеет высокую локальность, поэтому кэширование его частей в памяти выглядит хорошим вариантом. Возможно ли просто выполнить malloc () огромный массив и позволить операционной системе выяснить, какие биты следует выгружать, а какие оставить?

Ответы [ 2 ]

6 голосов
/ 21 сентября 2010

Предполагая, что данные поступают из файла, вам лучше сопоставить память этого файла.В противном случае вы в конечном итоге делаете выделение массива, а затем копируете данные из вашего файла в массив - и, поскольку ваш массив отображается в файл подкачки, вы просто копируете исходный файл в файл подкачки,и в процессе, загрязняющем «кэш» (т. е. физическую память), так что другие данные, которые в настоящее время активны, имеют гораздо больше шансов быть изгнанными.Затем, когда вы закончите, вы (как правило) записываете данные обратно из массива в исходный файл, что (в данном случае) означает копирование из файла подкачки обратно в исходный файл.

Отображение памятиВместо этого файл просто создает некоторое адресное пространство и сопоставляет его непосредственно с исходным файлом.Это позволяет избежать копирования данных из исходного файла в файл подкачки (и обратно, когда вы закончите), а также временного перемещения данных в физическую память по пути из исходного файла в файл подкачки.Конечно, самый большой выигрыш - это когда / если есть существенные части исходного файла, которые вы вообще никогда не используете (в этом случае они могут вообще никогда не считываться в физическую память, предполагая, что неиспользуемый кусок - это по крайней мере страницав размере).

0 голосов
/ 21 сентября 2010

Если данные находятся в большом файле, изучите использование mmap для их чтения.Современные компьютеры имеют так много оперативной памяти, что вам может не хватить места подкачки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...