C++ 中堆和栈的区别
在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。
从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的函数中:
void func() {
int a = 5;
// 这里的变量a存储在栈中,当func函数结束后,a所占用的栈空间会自动释放
}
而堆是由程序员手动分配和释放的内存区域,使用new
或malloc
等操作符来分配内存。比如:
int* p = new int;
// 这里在堆上分配了一个int类型大小的空间,并且返回指向这个空间的指针p
释放堆内存需要使用delete
(对于new
分配的内存)或者free
(对于malloc
分配的内存)。如果忘记释放堆内存,就会造成内存泄漏。
从内存生长方向上,