Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вопрос про кучи(heaps) и виртуальную память

6.8K
08 января 2008 года
Аццкий программер
91 / / 27.11.2006
Здравствуйте!

Не знаю, насколько уместен мой вопрос в данном разделе форума, но мне кажется, он касается низкоуровневого "общения" с памятью :~)

Изучаю книгу Дж. Рихтера "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
Застрял на разделе "Использование виртуальной памяти". Надесь, вы поможете мне разобраться ;)
Цитирую:
Цитата:
В Windows три механизма работы с памятью

-виртуальная память — наиболее подходящая для операций с большими массивами обьектов или структур

-проецируемые в память файлы — наиболее подходящие для операций с большими потоками данных (обычно из файлов) и для совместного использова ния данных несколькими процессами на одном компьютере

-кучи — наиболее подходящие для работы с множеством малых объектов



1.
Как я понял: проецирование файлов в память - это, грубо говоря, перезапись файла(или его части) в ОЗУ или страничный файл?

2.
Кучи - это та же виртуальная память, только управляемая менеджером системы?

3.
И под конец самый дурацкий вопрос :))
Я слышал такое понятие DUMP есть в крэкинге и дизассамблинге. Чем дамп отличается от кучи?

Заранее сасибо.

261
08 января 2008 года
ahilles
1.5K / / 03.11.2005
1. Проецирование файлов в память - это мэппинг. когда системене хватает физической памяти, она сбрасывает некоторую область памяти в файл подкачки. При использовании мэппинга, файл проецируется в некоторую область памяти и при нехватке физ. памяти эта область памяти будети сброшена не в файл подкачки, а в данный файл. Получается чтобы модифицировать файл достаточно изменять эту область памяти и вызвать UnMapViewOfFile.
2. Куча это некоторая область памяти, память которой может выделятся с меньшей гранулярностью чем при VirtualAlloc, при выделении памяти из кучи (HeapAlloc) память выделятся с гранулярностью 8 байт (если мне не изменяет память).
3. DUMP не имеет ничего общего ни с кучами ни с мэппингом. DUMP это сохранение некоторой области памяти в файл.
6.8K
08 января 2008 года
Аццкий программер
91 / / 27.11.2006
Цитата:
при использовании мэппинга, файл проецируется в некоторую область памяти и при нехватке физ. памяти эта область памяти будети сброшена не в файл подкачки, а в данный файл



т.е. если файл подкачки был 200 МБ, то после проекции в память 20 мб-файла файл подкачки возрос до 220 МБ?

другими словами проецируемые файлы "расширяют" файл подкачки? сами размеры файла подкачки при маппинге не уменьшеаются?

Цитата:
2. Куча это некоторая область памяти, память которой может выделятся с меньшей гранулярностью чем при VirtualAlloc, при выделении памяти из кучи (HeapAlloc) память выделятся с гранулярностью 8 байт (если мне не изменяет память).



окей, предположим это так(гранулярость кучи 8 байт)

т.е. получаем гранулярность кучи в 8 раз меньше гранулярности паямти (64 байта), таким образом разбиение происходит на более мелкие регионы? Следовательно, мы экономней используем память, занимая и освобождая более маленькие регионы памяти??:confused:

261
09 января 2008 года
ahilles
1.5K / / 03.11.2005
т.е. если файл подкачки был 200 МБ, то после проекции в память 20 мб-файла файл подкачки возрос до 220 МБ?
другими словами проецируемые файлы "расширяют" файл подкачки? сами размеры файла подкачки при маппинге не уменьшеаются?


да! файл подкачки не изменятся, файлом подкачки для промэпированной области памяти будет являтся искомый файл.


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


ДА. при обычном выделении памяти (через функцию VirtualAlloc) память выделяется с гранулярностью 64 Килобайта. Кучи чрезвычайно полезны при работе с множестовом маленьких областей памяти.

6.8K
09 января 2008 года
Аццкий программер
91 / / 27.11.2006
Цитата:
...меньше гранулярности паямти (64 байта)...



Цитата:
...память выделяется с гранулярностью 64 Килобайта...



глупость ляпнул :)

спс большое, разобрался вроде :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог