QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1296|回复: 5

进程退出时无销毁instance 的语句, 是否留下内存碎片

[复制链接]
发表于 2005-12-9 11:08:20 | 显示全部楼层 |阅读模式
很多参考书中的例程,
以及很多实用程序中有以下用法
ClassDog oldDog;

main()
{
...
...
oldDog.method1();
...
oldDog.method2();
...

}
 楼主| 发表于 2005-12-9 11:20:21 | 显示全部楼层
但main()退出时未见任何销毁oldDog所占用内存的任何操作,

1, 编译时,在main退出前加上了自动销毁所声明/定义的oldDlog类实例的语句? (好像C++不是这样的吧)

2, 无销毁oldDog所占的内存(堆/栈等),于是留下了内存碎片?

用new 然后用del,
能销毁类所占有的系统或进程内部内存/从表格中取消记录类实例的索引
但不用new和del,
怎么处理?
回复

使用道具 举报

发表于 2005-12-9 11:48:40 | 显示全部楼层
操作系统会回收进程的全部内存。

不常驻的程序new完了做不做delete一般都没什么问题。
回复

使用道具 举报

 楼主| 发表于 2005-12-10 09:46:51 | 显示全部楼层
恩,
我总是习惯把new和API里申请堆的函数一一对应.
回复

使用道具 举报

 楼主| 发表于 2005-12-10 09:57:35 | 显示全部楼层
确实有对应关系,
但C++的内存碎片回收机制,
以及与OS的结合,
有这么完善吗?

每个进程定义的类实例/申请的空间,
都能在 进程退出时销毁?
回复

使用道具 举报

发表于 2005-12-10 17:18:42 | 显示全部楼层
你的问题印证了我的一个感想,任何C,C++程序员都应该读一本讲解linux内核的书

OS才不管你的程序使用了什么语言写程序,它有自己的内存管理使用表,任何语言
的内存管理最终都是使用内核的服务,所以,进程退出,一个正确的OS就会回收所
有的进程资源。

如果你确实写出了一个可以在进程退出时让OS不能回收全部进程资源的程序,你成名了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 02:34 , Processed in 0.083630 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表