全局对象和static的生命周期和内存空间分类
面试的时候总会问到内存管理方面的内容,关于内存泄漏和智能指针的内容之后会专门写一篇文章来讲述。
今天来总结一下迷惑了很久的全局对象和static关键字。
一、全局对象
全局对象在程序启动时分配,在程序结束时销毁。
二、局部自动对象
对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时被销毁。
三、局部static对象
局部static对象在第一次使用前分配,在程序结束时销毁。
内存空间分类
- 静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。
- 栈内存用来保存定义在函数内的非static对象。
分配在静态内存或栈内存中的对象由编译器自动创建和销毁。
- 对于栈对象,仅在其定义的程序块运行时才存在
- static对象在使用之前分配,在程序结束时销毁
补充
除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间(free store)或堆(heap)。程序用堆来存储动态内存(dynamically allocate) 的对象——即,那些在程序运行时分配的对象。动态对象的生存周期由程序来控制,也就是说,当动态对象不再使用时,我们的代码必须显示地销毁它们。