使用Assembly调用HeapAlloc是否需要重新分配?

时间:2018-12-28 03:42:30

标签: assembly operating-system x86-64 heapalloc

在程序开始时,我使用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

此刻,内存似乎已自动释放,但是忽略释放是一种不错的方式吗?

1 个答案:

答案 0 :(得分:4)

  

在程序开始时,我使用HeapAlloc分配内存。程序结束时是否需要取消分配它或由系统完成分配?

您分配的是正在运行的进程内存空间的一部分。当进程终止时,这种情况就不复存在了。

  

此刻,内存似乎已自动释放,但是忽略释放是一种不错的方式吗?

是的。进程终止时,其地址空间不再存在。它无法保持分配状态。通常,忽略重分配并不是一种好的样式,因为它使代码无法用于较大的程序,并且使调试内存泄漏变得更加困难。但这在进程终止后实际上不会导致任何泄漏。