在程序开始时,我使用HeapAlloc分配内存。程序结束时是否需要取消分配它或由系统完成分配?
start:
call GetProcessHeap
mov r11, rax ; r11 contains handle
mov rdi, 8000000
mov rsi, 0
mov rdx, r11
call HeapAlloc
mov r12, rax ; r12 contains pointer to memory block
mov ecx, 1000000
xor eax, eax
.looptop_populate
add rax, rcx
mov [r12+8*rcx-8], rax
loop .looptop_populate
mov rdi, [r12]
call write_uinteger
xor eax, eax
ret
; goasm /x64 /l malloc
; golink /console malloc.obj kernel32.dll
此刻,内存似乎已自动释放,但是忽略释放是一种不错的方式吗?
答案 0 :(得分:4)
在程序开始时,我使用HeapAlloc分配内存。程序结束时是否需要取消分配它或由系统完成分配?
您分配的是正在运行的进程内存空间的一部分。当进程终止时,这种情况就不复存在了。
此刻,内存似乎已自动释放,但是忽略释放是一种不错的方式吗?
是的。进程终止时,其地址空间不再存在。它无法保持分配状态。通常,忽略重分配并不是一种好的样式,因为它使代码无法用于较大的程序,并且使调试内存泄漏变得更加困难。但这在进程终止后实际上不会导致任何泄漏。