Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Memory mapping 28.07.05 15:45 Число просмотров: 2071
Автор: amirul <Serge> Статус: The Elderman
|
> Здравствуйте.
На POSIX-ах это mmap, на Win32 - CreateFileMapping/MapViewOfFile
> этот массив имеет размер около 0,5 ГБайта (для полного > расчета будет порядка нескольких ГБайт) и загрузка его
Будет одна проблема. Адресного пространства процесса может не хватить для размещения твоего меппинга. Тут уж 64-битная адресация с 64-битными же процессорами (PAE - это очередная глупая заплатка на нерасширяемую архитектуру)
> занимает значительное время, что очень не удобно при > отладке программы, необходимо постоянно ждать по несколько > минут. Решение этой проблемы я вижу в том, что бы постоянно > хранить этот массив в памяти (приложения, потока или чего > ни будь еще), а программа расчета просто получала бы этот > массив при каждой загрузке.
При меппинге резервируется область памяти, а чтение из файла производится непосредственно в момент обращения к странице.
> Вопрос мой такой, посредством чего можно получить этот > массив (что почитать). При чем желательно не копировать > массив, поскольку это не дает значительного ускорения (а > возможно наоборот) так как значительная часть этого массив > хранится в свопе, так же этот метод приведет к удвоению
Никакого удвоения не будет. Можешь считать отмепленный файл дополнительным свопом, куда будут свопиться изменения той области памяти, в которую ты отмепил этот файл
> занимаемой памяти, что, наверное, не совсем хорошо скажется > на производительности. Хорошо бы получать ссылку на этот > массив (но у каждой приложениия свое адресное > пространство).
Один из побочных эффектов - ЭТОТ ЖЕ файл может отмепить в свое адресное пространство произвольное количество процессов. При этом они будут ФИЗИЧЕСКИ иметь общую память (то есть в адресное пространство каждого процесса будут впечатаны одни и те же физические страницы памяти)
|
|
|