· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› HeapAlloc

Посл.отвђт Сообщенiе


Дата: Авг 18, 2003 17:57:53

Объясните такому тупому на пальцах.
Есть вызов HeapAlloc (20 кб), затем HeapReAlloc (2 кб), после чего если попробовать опять HeapReAlloc(20 кб) говорит, что нету памяти :( . И еще - в API написано, что при частом юзании HeapAlloc память дефрагментируется, относится ли это GlobalAlloc&?


Дата: Авг 18, 2003 18:05:51

А как HeapCreate() был вызван?


Дата: Авг 18, 2003 19:45:11

__Ranger
Да и фрагмент кода с вызовами HeapAlloc / HeapReAlloc не помешает.

относится ли это GlobalAlloc&?
AFAIK, нет.


Дата: Авг 19, 2003 02:20:03

init_data proc
invoke GetProcessHeap
push eax
invoke HeapAlloc,eax,HEAP_ZERO_MEMORY,20480
mov data_head,eax
call read_options
mov eax,data_tail
sub eax,data_head
pop ecx
push eax
invoke HeapReAlloc,ecx,0,data_head,eax
pop ecx
; если блок был сдвинут
mov data_head,eax
add eax,ecx
mov data_tail,eax

ret
init_data endp

;немного дальше
...
invoke GetProcessHeap
push eax
invoke HeapAlloc,eax,HEAP_ZERO_MEMORY,20480
PrintError ;нету памяти
Между кусками исп. GlobalAlloc, больше нигде куча не используется


Дата: Авг 19, 2003 04:53:20

__Ranger
Проверил. У меня этот код прекрасно работает (Windows ME). Возможно, проблема вовсе не в хипе. Проверьте эту программу под отладчиком (на всякий случай можно напичкать туда HeapSize между HeapAlloc/ReAlloc).


Дата: Авг 19, 2003 13:16:14

> Между кусками исп. GlobalAlloc, больше нигде куча не используется

И что это по твоему доказывает? GlobalAlloc() вызывает тот же самый HeapAlloc(), ибо как сказано в Platform SDK: "Windows memory management does not provide a separate local heap and global heap". Или я гоню? =)


Дата: Авг 19, 2003 13:56:06

Dr.Golova
В 2000 точно одно и тоже.. А в 98.. чёрт их знает.


Дата: Авг 20, 2003 01:00:45

Все дороги (аллокации...) ведут к ntdll.RtlAllocateHeap().


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074