linux环境下delete 没有释放内存

while(n) 2019-01-15 04:06:17
程序初始化的时候new了900W个结构体,进程占用的内存狂涨,结构体里都是基本类型,但程序停止的时候delete这900W个结构体,内存却没有下降,何解???
...全文
737 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Simple-Soft 2019-01-17
  • 打赏
  • 举报
回复 1
调用malloc_trim(0)可以释放 在你的delete之后,或者做了一些 操作后,可以调用malloc_trim(0)来释放没有马上释放的内存,就不会导致内存上升了。
林多 2019-01-16
  • 打赏
  • 举报
回复
结构体,析构函数,没写正确吧。或者压根就没写。

这种情况很正常的呀。比方说

struct A
{
int* b;
A() {
b = new int(10);
}
}

不写析构函数的话。new出来A,在delete掉。就有内存泄露了。
lin5161678 2019-01-15
  • 打赏
  • 举报
回复
引用 5 楼 nikonglong 的回复:
我是直接用new和delete 肯定是匹配的 delete内存没降低,下一次初始化又涨了,往复循环,进程占用的内存越来越多就被杀死了。

贴代码看看
原版太多就写一个测试用的
提取出主要操作
while(n) 2019-01-15
  • 打赏
  • 举报
回复
引用 1 楼 Simple-Soft 的回复:
Linux下面默认delete后,不会马上释放内存,而是留给这个程序继续使用,这是GCC的特性,不是内存泄漏。

那是不是说,delete之后不置为null,下一次不用new就可以直接拿来用了
while(n) 2019-01-15
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
[quote=引用 3 楼 nikonglong 的回复:]
[quote=引用 1 楼 Simple-Soft 的回复:]
Linux下面默认delete后,不会马上释放内存,而是留给这个程序继续使用,这是GCC的特性,不是内存泄漏。

那如果在特定的情况下,重复的初始化与反初始化,数次之后该进程占用的内存就会很高,导致被系统强制杀死了,有什么好的解决方法麽[/quote]反初始化后 进程继续占用内存就是为了下次初始化的时候 直接使用这块内存 不再重新分配内存 提高运行效率
这一段是透明的 不用管

你应该检查内存泄露的情况
比如 new[] 和 delete[] 没匹配[/quote]
我是直接用new和delete 肯定是匹配的 delete内存没降低,下一次初始化又涨了,往复循环,进程占用的内存越来越多就被杀死了。
lin5161678 2019-01-15
  • 打赏
  • 举报
回复
引用 3 楼 nikonglong 的回复:
[quote=引用 1 楼 Simple-Soft 的回复:]
Linux下面默认delete后,不会马上释放内存,而是留给这个程序继续使用,这是GCC的特性,不是内存泄漏。

那如果在特定的情况下,重复的初始化与反初始化,数次之后该进程占用的内存就会很高,导致被系统强制杀死了,有什么好的解决方法麽[/quote]反初始化后 进程继续占用内存就是为了下次初始化的时候 直接使用这块内存 不再重新分配内存 提高运行效率
这一段是透明的 不用管

你应该检查内存泄露的情况
比如 new[] 和 delete[] 没匹配
while(n) 2019-01-15
  • 打赏
  • 举报
回复
引用 1 楼 Simple-Soft 的回复:
Linux下面默认delete后,不会马上释放内存,而是留给这个程序继续使用,这是GCC的特性,不是内存泄漏。

那如果在特定的情况下,重复的初始化与反初始化,数次之后该进程占用的内存就会很高,导致被系统强制杀死了,有什么好的解决方法麽
幻夢之葉 2019-01-15
  • 打赏
  • 举报
回复
delete [] buf;
Simple-Soft 2019-01-15
  • 打赏
  • 举报
回复
Linux下面默认delete后,不会马上释放内存,而是留给这个程序继续使用,这是GCC的特性,不是内存泄漏。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧