0

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

目前内存似乎是自动释放的,但是忽略释放是一种很好的风格吗?

4

1 回答 1

4

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

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

目前内存似乎是自动释放的,但是忽略释放是一种很好的风格吗?

这是正确的。当一个进程终止时,它的地址空间不再存在。它不可能保持分配状态。一般来说,忽略释放被认为是不好的风格,因为它使代码无法用于更大的程序,并且更难调试内存泄漏。但它实际上不会在进程终止后导致任何泄漏。

于 2018-12-28T03:51:45.977 回答