![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Всем привет. У меня недавно появилось убеждение что я плаваю в вопросе выделения памяти. Хочеться ясности. Существует несколько функций выделения памяти:
GlobalAlloc, HeapAlloc, VirtualAlloc, VirtualAllocEx, LocalAlloc (может какую пропустил), так вот меня интересует область применения каждой из них. Мсдн по ним я читал Memory Management Functions вроде все понятно что какая делает. Меня именно интересует в каких случаях какую применять. Вот. Поделитесь мыслями если не сложно. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
GlobalAlloc - выделяет память доступную для нескольких процессов. Работает медленно. Не рекомендуется использовать. Замена File Mapping Object.
VirtualAlloc, VirtualAllocEx - это основные функции для выделения/резервирования страниц памяти в Windows. Работают быстро, но не умеет выделять куски меньше 4кб. HeapAlloc, LocalAlloc - это вторичные функции, используют API механизм работы c кучей (вызывают VirtualAlloc для резервирования места под кучу). Позволяют выделять маленькие куски, но работают медленно, та что никому не нужны -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
т.е. по сути получается юзать надо или делфевый менеджер памяти или VirtualAlloc(VirtualAllocEx для не своих процессов). Пасиб за информацию.
PS: кстати делфевый что на чем основан? у него какой-то свой механизм, или всеже использует какой-нить VirtualAlloc? дебагером не смог установить... :( Добавлено через 13 минут вот что делфя делает, но что-то мне на вскидку не о чем не говорит :(
Никаких вызовов Alloc-ов, значит что-то свое. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
VirtualAlloc - это краеугольный камень в выделении памяти юзер мод процессов. Конечно же ее. Вот этот метод реально резервирует память.
Добавлено через 2 минуты и 14 секунд Rennigth, поставь галочку Debug DCU и по F7 зайди в GetMem. Если блок был достаточно большой (т.е. не хватит резервного места), то он зайдет в эту функцию. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
т.е. основываясь на когда мы вызываем GetMemory(1) по сути мы все равно 4к выделяем? или медеджер как-то рулит этим. Добавлено через 5 минут и 1 секунду
ясно. -------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |