什么是内存堆?
当前回答
您可能指的是堆内存,而不是内存堆。
堆内存本质上是一个大内存池(通常是每个进程),运行中的程序可以从中请求块。这通常称为动态分配。
它不同于Stack,后者是分配“自动变量”的。因此,例如,当你在C函数中定义一个指针变量时,在堆栈上分配了足够的空间来保存内存地址。但是,您经常需要在堆上动态分配空间(使用malloc),然后向指针提供该内存块开始的地址。
其他回答
内存堆是保存动态分配内存的常用结构。 参见维基百科上的Dynamic_memory_allocation。
还有其他结构,比如水池、堆栈和堆。
您可能指的是堆内存,而不是内存堆。
堆内存本质上是一个大内存池(通常是每个进程),运行中的程序可以从中请求块。这通常称为动态分配。
它不同于Stack,后者是分配“自动变量”的。因此,例如,当你在C函数中定义一个指针变量时,在堆栈上分配了足够的空间来保存内存地址。但是,您经常需要在堆上动态分配空间(使用malloc),然后向指针提供该内存块开始的地址。
堆只是一个没有任何顺序地分配或释放内存的区域。这种情况发生在使用new操作符或类似操作符创建对象时。这与按先入后出原则释放内存的堆栈相反。
A memory heap is a location in memory where memory may be allocated at random access. Unlike the stack where memory is allocated and released in a very defined order, individual data elements allocated on the heap are typically released in ways which is asynchronous from one another. Any such data element is freed when the program explicitly releases the corresponding pointer, and this may result in a fragmented heap. In opposition only data at the top (or the bottom, depending on the way the stack works) may be released, resulting in data element being freed in the reverse order they were allocated.
它是进程使用的内存管理器从操作系统分配的内存块。然后调用malloc()等从这个堆中获取内存,而不必直接处理操作系统。