今天看SGI STL源码剖析空间配置器部分,有一个疑问,求解

牛逼代码 2014-08-23 05:53:00
具体问题是:
SGI STL的第二级空间配置器分配完空间之后,不回收给系统吗?(每次都将空间回收添加都free list上等待二次分配,这些空间什么时候还给系统?)

没看到相关释放内存池的代码。
求解释。
...全文
183 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛逼代码 2014-08-24
  • 打赏
  • 举报
回复
引用 6 楼 mujiok2003 的回复:
[quote=引用 3 楼 sanguonaigao 的回复:] [quote=引用 2 楼 mujiok2003 的回复:] 不曾归还直到进程退出。
但是如果调用了malloc之后不调用free,就会出现内存泄露啊。[/quote] 这可以认为不算泄露, 很多内存池都是真么干的, 因为还是可以释放的。 一般的泄露是因为没有记住分配的地址,没有办法释放了。

//A
char * p = new char[5];
//...
//B 
p  = new char[6];
//B还可以释放, 但是A已经没有办法释放了
[/quote]你的意思是malloc和free(new和delete)即使不成对出现也不一定造成内存泄露?
mujiok2003 2014-08-24
  • 打赏
  • 举报
回复
引用 7 楼 sanguonaigao 的回复:
[quote=引用 6 楼 mujiok2003 的回复:] [quote=引用 3 楼 sanguonaigao 的回复:] [quote=引用 2 楼 mujiok2003 的回复:] 不曾归还直到进程退出。
但是如果调用了malloc之后不调用free,就会出现内存泄露啊。[/quote] 这可以认为不算泄露, 很多内存池都是真么干的, 因为还是可以释放的。 一般的泄露是因为没有记住分配的地址,没有办法释放了。

//A
char * p = new char[5];
//...
//B 
p  = new char[6];
//B还可以释放, 但是A已经没有办法释放了
[/quote]你的意思是malloc和free(new和delete)即使不成对出现也不一定造成内存泄露?[/quote] 就看你怎么定义泄露了。
阿呆_ 2014-08-24
  • 打赏
  • 举报
回复
引用 7 楼 sanguonaigao 的回复:
[quote=引用 6 楼 mujiok2003 的回复:] [quote=引用 3 楼 sanguonaigao 的回复:] [quote=引用 2 楼 mujiok2003 的回复:] 不曾归还直到进程退出。
但是如果调用了malloc之后不调用free,就会出现内存泄露啊。[/quote] 这可以认为不算泄露, 很多内存池都是真么干的, 因为还是可以释放的。 一般的泄露是因为没有记住分配的地址,没有办法释放了。

//A
char * p = new char[5];
//...
//B 
p  = new char[6];
//B还可以释放, 但是A已经没有办法释放了
[/quote]你的意思是malloc和free(new和delete)即使不成对出现也不一定造成内存泄露?[/quote] 对整个系统来说不存在内存泄漏。对你的进程来说存在内存泄漏。malloc的内存不free不能再次被malloc分配。
mujiok2003 2014-08-23
  • 打赏
  • 举报
回复
引用 3 楼 sanguonaigao 的回复:
[quote=引用 2 楼 mujiok2003 的回复:] 不曾归还直到进程退出。
但是如果调用了malloc之后不调用free,就会出现内存泄露啊。[/quote] 这可以认为不算泄露, 很多内存池都是真么干的, 因为还是可以释放的。 一般的泄露是因为没有记住分配的地址,没有办法释放了。

//A
char * p = new char[5];
//...
//B 
p  = new char[6];
//B还可以释放, 但是A已经没有办法释放了
mujiok2003 2014-08-23
  • 打赏
  • 举报
回复
引用 4 楼 sanguonaigao 的回复:
[quote=引用 2 楼 mujiok2003 的回复:] 不曾归还直到进程退出。
进程结束的时候如何归还?[/quote] 不用归还,进程退成, 整个进程空间都不存在了。
牛逼代码 2014-08-23
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
不曾归还直到进程退出。
进程结束的时候如何归还?
牛逼代码 2014-08-23
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
不曾归还直到进程退出。
但是如果调用了malloc之后不调用free,就会出现内存泄露啊。
mujiok2003 2014-08-23
  • 打赏
  • 举报
回复
不曾归还直到进程退出。
阿呆_ 2014-08-23
  • 打赏
  • 举报
回复
进程结束时,所有内存会被系统自动回收。

64,637

社区成员

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

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