Составители:
Рубрика:
кие фрагменты. 16-разрядные Windows-программы выделяют память как из
глобальной, так и из локальной динамической области. Последняя работает
быстрее, но ее объем ограничен 64 Кб.
Современные ОС семейства Windows со своим плоским адресным про-
странством аннулируют разницу между понятиями глобальный и локальный,
а также дальний и ближний, превращая всю память в одну нераздельную ди-
намическую область.
Даже при наличии большого непрерывного адресного пространства ино-
гда целесообразно работать с динамической областью памяти меньшего разме-
ра. Резервирование и закрепление виртуальной памяти имеет очевидные пре-
имущества при работе с большими динамическими или разреженными
структурами. А как быть с алгоритмами, которые предполагают выделение
большого количества мелких блоков памяти? Команды для работы с динами-
ческой областью памяти позволяют создавать в адресном пространстве про-
граммы одну или несколько локальных куч и выделять из них более мелкие
блоки памяти.
Команды для работы с динамической областью памяти удобны тем, что
позволяют сосредоточить выделенные блоки в небольшом диапазоне адресно-
го пространства. Группировка выделенных блоков выполняется по следующим
причинам:
– она позволяет отделить и защитить группу связанных блоков. Про-
грамма, создающая большое количество маленьких блоков одинакового раз-
мера, гораздо эффективнее упаковывает память, если блоки следуют последо-
вательно;
– если все узлы связанного списка находятся в одной куче, а узлы дво-
ичного дерева – в другой, ошибка одного алгоритма в меньшей степени ска-
жется на работе другого алгоритма;
– объекты памяти, работающие совместно, могут быть сгруппированы,
что сводит к минимуму подкачку страниц. Несколько адресов, оказавшихся на
одной странице памяти, можно прочитать с помощью одной дисковой операции.
Для получения дескриптора кучи «по умолчанию» используется функция
HANDLE GetProcessHeap(VOID).Используя возвращаемый этой функцией де-
скриптор, можно осуществлять работу с кучей.
Память, выделяемая из кучи, ничем не отличается от любой другой памяти.
Вы можете самостоятельно организовать работу с кучей, прибегнув к командам
управления виртуальной памятью, – ведь именно так поступает Windows. Для соз-
дания кучи нужно задать ее начальный и максимальный размеры:
HANDLE HeapCreate
(DWORD dwOptions, // флаг выделения кучи
DWORD dwInitialSize, // начальный размер кучи
DWORD dwMaximumSize, // максимальный размер кучи);…
Подсистема Win32 реагирует на эту функцию, резервируя блок памяти
максимального размера и закрепляя страницы, которые определяют начальный
54
кие фрагменты. 16-разрядные Windows-программы выделяют память как из
глобальной, так и из локальной динамической области. Последняя работает
быстрее, но ее объем ограничен 64 Кб.
Современные ОС семейства Windows со своим плоским адресным про-
странством аннулируют разницу между понятиями глобальный и локальный,
а также дальний и ближний, превращая всю память в одну нераздельную ди-
намическую область.
Даже при наличии большого непрерывного адресного пространства ино-
гда целесообразно работать с динамической областью памяти меньшего разме-
ра. Резервирование и закрепление виртуальной памяти имеет очевидные пре-
имущества при работе с большими динамическими или разреженными
структурами. А как быть с алгоритмами, которые предполагают выделение
большого количества мелких блоков памяти? Команды для работы с динами-
ческой областью памяти позволяют создавать в адресном пространстве про-
граммы одну или несколько локальных куч и выделять из них более мелкие
блоки памяти.
Команды для работы с динамической областью памяти удобны тем, что
позволяют сосредоточить выделенные блоки в небольшом диапазоне адресно-
го пространства. Группировка выделенных блоков выполняется по следующим
причинам:
– она позволяет отделить и защитить группу связанных блоков. Про-
грамма, создающая большое количество маленьких блоков одинакового раз-
мера, гораздо эффективнее упаковывает память, если блоки следуют последо-
вательно;
– если все узлы связанного списка находятся в одной куче, а узлы дво-
ичного дерева – в другой, ошибка одного алгоритма в меньшей степени ска-
жется на работе другого алгоритма;
– объекты памяти, работающие совместно, могут быть сгруппированы,
что сводит к минимуму подкачку страниц. Несколько адресов, оказавшихся на
одной странице памяти, можно прочитать с помощью одной дисковой операции.
Для получения дескриптора кучи «по умолчанию» используется функция
HANDLE GetProcessHeap(VOID).Используя возвращаемый этой функцией де-
скриптор, можно осуществлять работу с кучей.
Память, выделяемая из кучи, ничем не отличается от любой другой памяти.
Вы можете самостоятельно организовать работу с кучей, прибегнув к командам
управления виртуальной памятью, – ведь именно так поступает Windows. Для соз-
дания кучи нужно задать ее начальный и максимальный размеры:
HANDLE HeapCreate
(DWORD dwOptions, // флаг выделения кучи
DWORD dwInitialSize, // начальный размер кучи
DWORD dwMaximumSize, // максимальный размер кучи);…
Подсистема Win32 реагирует на эту функцию, резервируя блок памяти
максимального размера и закрепляя страницы, которые определяют начальный
54
Страницы
- « первая
- ‹ предыдущая
- …
- 52
- 53
- 54
- 55
- 56
- …
- следующая ›
- последняя »
