8. 堆、栈与内存管理

1. 栈(stack)和堆(heap)

stack,是存在与某作用域(scope)的一块内存空间(memory space),例如当你调用函数,函数本身即会形成一个stack用来放置它所接收的参数,以及返回地址。

在函数本体(function body)内声明的任何变量,其所使用的内存块都取自上述stack.

Heap, 所谓system heap, 是指由操作系统提供的一块 global 内存空间,程序可动态分配(dynamic allocated)从其中获得若干区块(blocks).

当离开作用域{}的时候,c1的生命自然就消失了, 即从栈中获得的内存,离开作用域的时候会自动释放。

当离开作用域{}的时候,动态分配的内存不会消失,即从堆中动态取得的内存不会自动消失,需要手动释放(delete 掉)。

c1所占用的空间来自stack,它就是所谓的栈对象(stack object),其声明在作用域(scope)结束之际结束。这种作用域内的对象(object),又叫做local object, auto object, 因为它会被自动清理(意思是析构函数被自动调用)

 2. 静态对象

一个对象前面加上 static 修饰符后,c2既变成所谓的静态对象(static object),其生命在作用域(scope)结束之后仍然存在,直到整个程序的结束。

如果你需要静态对象的这种特性,就要这样定义静态对象。

猜你喜欢

转载自www.cnblogs.com/yibeimingyue/p/12303001.html
今日推荐