c++的局部变量,能否被提前手动释放?
我们知道c++中的局部变量,在函数结束后会自动释放但是,假定我这个函数是一个死循环的函数。不会运行结束,那这样我的局部变量就会一直占用内存空间。我该怎样提前释放它?
你要弄清楚什么是局部变量?这个变量里面存的是指针还是数值?都可以 赋值0来清除。但是如果你认为是堆栈。那你可以用汇编pop掉他 把变量定义在循环外,一直复用这个变量,就不会要考虑资源释放问题 c++ 有堆和栈, 栈空间无法释放! 需要手动释放的内存一定是程序申请的堆内存。
栈内存,只要不是存在无限递归,不会存在内存泄漏问题。
局部变量是指针 new malloc 需要手动 delete free 释放,智能指针,循环利用需要reset,最后可release释放。
如果死循环中只调用一次某个函数,call_once了解一下。
比如 循环外char* szBuf = new char{ 0 }; 循环里重复使用时,memset(szBuf, 0, nBufLen);,循环外 delete []szBuf。
循环内char* szBuf = new char{ 0 }; 循环里重复使用时,memset(szBuf, 0, nBufLen);,循环内 delete []szBuf,否则就会内存泄漏。
psvajaz 发表于 2023-3-25 11:42
把变量定义在循环外,一直复用这个变量,就不会要考虑资源释放问题
正解,楼主提出的问题好奇怪,不停的分配与释放么 栈不需要释放,在一个过程中不增不减
递归的时候就会比较麻烦 肯定不行啊 注意你的作用域,一般用花括号括起来就好了(花括号就是作用域)。就是,你在花括号里面声明了,函数运行到花括号外面自动就释放了。
页:
[1]