Answers:
大概是从内存分配的角度来看堆,而不是从数据结构的角度看(该术语具有多种含义)。
一个非常简单的解释是,堆是动态分配的内存所在的内存部分(即,通过分配的内存malloc
)。从堆分配的内存将保持分配状态,直到发生以下情况之一:
free
“d如果所有对已分配内存的引用都丢失了(例如,您不再存储指向它的指针),那么您将遇到所谓的内存泄漏。这是仍在分配内存的位置,但是您再也没有简单的方法来访问它了。泄漏的内存无法回收用于将来的内存分配,但是在程序结束时,操作系统将释放内存。
与此相比,堆栈内存是局部变量(在方法中定义的变量)所在的地方。通常,在函数返回之前,堆栈上分配的内存通常一直存在(此操作有一些例外,例如静态局部变量)。
您可以在本文中找到有关堆的更多信息。
内存堆是用于保存动态分配的内存的通用结构。请参阅Wikipedia上的Dynamic_memory_allocation。
还有其他结构,例如水池,栈和桩。
它是进程正在使用的内存管理器从操作系统分配的一大块内存。malloc()
然后调用et alia会从此堆中获取内存,而不必直接处理操作系统。