码迷,mamicode.com
首页 > 编程语言 > 详细

关于c++中局部变量和全局变量的存储位置及内存回收机制

时间:2018-04-10 17:38:44      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:结束   sha   http   有效期   article   释放   内存回收   程序   存储位置   

局部变量,参数变量存放在栈中,当离开作用范围后,分配的内存在作用范围外会被系统自动回收。

new出来的内存空间存放在堆中,不受作用域管理,不会被系统自动回收,只有在使用delete删除或者整个程序结束后才会释放内存。

因此很容易发生忘记delete而造成内存泄漏事件。例如在某个函数中定义有:

A* a=new A();

则指针a在函数运行完毕后将销毁,但是new出来的内存并不会被销毁,需要执行delete a;才能被销毁。

此外static变量,全局变量的有效期都是整个程序运行期。

而智能指针的出现则是在指针被销毁的情况下,也会销毁指针指向的内存,避免内存泄漏发生。

这是一种常见的内存泄露的情况。尽量避免手动管理指针,采用c++11中的shared_ptr和unique_ptr来管理。

详细说明请参考:https://blog.csdn.net/qq_33266987/article/details/51965221

 

关于c++中局部变量和全局变量的存储位置及内存回收机制

标签:结束   sha   http   有效期   article   释放   内存回收   程序   存储位置   

原文地址:https://www.cnblogs.com/zhuluqing/p/8780215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!