вопрос про кучи(heaps) и виртуальную память
Не знаю, насколько уместен мой вопрос в данном разделе форума, но мне кажется, он касается низкоуровневого "общения" с памятью :~)
Изучаю книгу Дж. Рихтера "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
Застрял на разделе "Использование виртуальной памяти". Надесь, вы поможете мне разобраться ;)
Цитирую:
-виртуальная память — наиболее подходящая для операций с большими массивами обьектов или структур
-проецируемые в память файлы — наиболее подходящие для операций с большими потоками данных (обычно из файлов) и для совместного использова ния данных несколькими процессами на одном компьютере
-кучи — наиболее подходящие для работы с множеством малых объектов
1.
Как я понял: проецирование файлов в память - это, грубо говоря, перезапись файла(или его части) в ОЗУ или страничный файл?
2.
Кучи - это та же виртуальная память, только управляемая менеджером системы?
3.
И под конец самый дурацкий вопрос :))
Я слышал такое понятие DUMP есть в крэкинге и дизассамблинге. Чем дамп отличается от кучи?
Заранее сасибо.
2. Куча это некоторая область памяти, память которой может выделятся с меньшей гранулярностью чем при VirtualAlloc, при выделении памяти из кучи (HeapAlloc) память выделятся с гранулярностью 8 байт (если мне не изменяет память).
3. DUMP не имеет ничего общего ни с кучами ни с мэппингом. DUMP это сохранение некоторой области памяти в файл.
т.е. если файл подкачки был 200 МБ, то после проекции в память 20 мб-файла файл подкачки возрос до 220 МБ?
другими словами проецируемые файлы "расширяют" файл подкачки? сами размеры файла подкачки при маппинге не уменьшеаются?
окей, предположим это так(гранулярость кучи 8 байт)
т.е. получаем гранулярность кучи в 8 раз меньше гранулярности паямти (64 байта), таким образом разбиение происходит на более мелкие регионы? Следовательно, мы экономней используем память, занимая и освобождая более маленькие регионы памяти??:confused:
другими словами проецируемые файлы "расширяют" файл подкачки? сами размеры файла подкачки при маппинге не уменьшеаются?
да! файл подкачки не изменятся, файлом подкачки для промэпированной области памяти будет являтся искомый файл.
т.е. получаем гранулярность кучи в 8 раз меньше гранулярности паямти (64 байта), таким образом разбиение происходит на более мелкие регионы? Следовательно, мы экономней используем память, занимая и освобождая более маленькие регионы памяти?
ДА. при обычном выделении памяти (через функцию VirtualAlloc) память выделяется с гранулярностью 64 Килобайта. Кучи чрезвычайно полезны при работе с множестовом маленьких областей памяти.
глупость ляпнул :)
спс большое, разобрался вроде :)