和栈一样存储在计算机RAM。
在堆上的变量必须要手动释放,不存在作用域的问题。数据可用 delete, delete[] 或者 free 来释放。
相比在栈上分配内存要慢。
通过程序按需分配。
大量的分配和释放可造成内存碎片。
在 C++ 中,在堆上创建数的据使用指针访问,用 new 或者 malloc 分配内存。
如果申请的缓冲区过大的话,可能申请失败。
在运行期间你不知道会需要多大的数据或者你需要分配大量的内存的时候,建议你使用堆。
可能造成内存泄露。
举例:
int foo()
{
char *pBuffer;
//<--nothing allocated yet (excluding the pointer itself, which is allocated here on the stack).
bool b = true;
// Allocated on the stack.
if(b)
{
//Create 500 bytes on the stack
char buffer[500];
//Create 500 bytes on the heap
pBuffer = new char[500];
}
//<-- buffer is deallocated here, pBuffer is not
}
//<--- oops there's a memory leak, I should have called delete[] pBuffer;