![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
как выделить память с помощью менеджера памяти Delphi без её обнуления? требуется для оптимизации, блок памяти большой, несколько мегабайт. после выделения блок тут же заполняется данными, надобности в его обнулении никакой.
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А как ты её выделяешь?
Обычно она не зануляется. Тот же GetMem никакого зануления не делает. Если тебя смущает, что в этой области оказались нули, то ничего странного, просто частенько в памяти они и сидят. Даже без зануления. Добавлено через 4 минуты и 54 секунды Вот пример:
В файл сбрасывается следующее:
|
||||
|
|||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Для больших блоков, в первый раз он в любом случае обнулиться, поскольку его обнуляет VirtualAlloc, который вызовет менеджер кучи для увеличения ее размера (для малых блоков она не наращивается).
Но можно не занулять память при повторном выделении того же блока. Так по крайней мере говориться в MSDN. Например выделили.
Но в дальнейшем можно ее разрешить для порчи (при этом не освобождая совсем) Например так
Ее будут юзать другие проги до тех пор пока не будет вызван VirtualAlloc с параметром MEM_RESERVE, после этого в памяти может быть что угодно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
через GetMem. обнуляет её, как уже сказали, VirtualAlloc. Alexeis, попробовал через LocalAlloc без флага LMEM_ZEROINIT - фрагментация дикая. придётся похоже смириться с обнулением.. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Это же куча! А делфийская куча даст фору всяким виндовозным! Да и тот же LocalAlloc тоже использует VirtualAlloc.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Зануляется только память, которая ранее не принадлежала нашей программе.
Было бы странно, если бы это не делалось... |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
хм.. если это действительно так, тогда вопрос снят. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |