Stack 栈
- 是存在于某个作用域scope的一块内存空间memory space。
- 例如当你调用函数,函数本身会形成一个stack用来放置它所接收的参数,返回地址,以及局部变量。
- 在函数本体function body内声明的任何变量,其所使用的内存都取自上述stack
- Complex c1(1,2);
- stack objects的生命周期:作用域内,又称为auto object,会被自动清理,自动调用析构函数。
Heap 堆
- 或者称为system heap,始只由OS提供的一块global内存空间,程序可动态分配dynamic allocated从某处获得若干区域blocks
- Complex* p = new Complex(3);
- delete p;
- heap objects 的生命期
- delete的时候结束
- 内存泄漏
- { Complex* p = new Complex; }
- 作用域结束之后,p释放了,但是p所指的内存没有被释放;再也没机会释放delete了。
无指针版的 new & delete
有指针版的 new & delete
全局区
- static local objects 的生命期
- { static Complex c2(1,2); }
- 作用域结束后仍然存在,直到程序结束。
- global objects 的生命期
- Complex c3(1,2);
int main() { ... } - 整个程序结束之后才结束
- Complex c3(1,2);