2011-06-21 42 views
-2

我知道删除将内存返回给分配给堆的堆,但是有什么意义?电脑有很多内存不是吗?只要你“X”退出程序,所有的内存都会返回。为什么你使用关键字删除?

+7

这应该被标记为一个坏玩笑。 – Yuck

+2

也许只是一个学生试图把我们的报价之一,他的老师的脸后,他得到了在不清理自己的记忆.. – Blindy

+2

回答问题测试一个坏的标志,并有礼貌。 –

回答

3

实施例:

考虑到分配对象Packet为每个收到的数据包的服务器(这是不好的设计为举例起见)。 本质上,服务器旨在从不关闭。如果你从来没有delete数千个Packet你的服务器每秒处理,你的系统将在几分钟内瘫痪并崩溃。

又如:

考虑一个视频游戏的特效分配颗粒,每次新的爆炸创建(永不删除它们)。在像星际争霸(或其他最近的游戏)这样的游戏中,经过几分钟的欢闹和破坏(以及数千个粒子的漩涡),滞后将会非常巨大,以至于您的游戏将变成PowerPoint幻灯片,从而使您的玩家不高兴。

+0

好吧,这是有道理的 – Iowa15

2

并非所有程序都很快退出。

某些应用程序可能运行数小时,数天或更长时间。守护进程可能被设计为不停地运行。程序可以在整个生命周期内消耗更多的内存,比机器上的更多。

另外,并非所有程序都是孤立运行的。大多数需要与其他应用程序共享资源。

1

有很多的原因,你应该管理你的内存使用情况,以及你使用任何其它计算机资源:

  • 什么可能一开始是一个轻量级的项目可能很快就会变得更加复杂,这取决于您的内存消耗设计领域可能呈指数增长。
  • 请记住,您正在与其他程序共享内存资源。作为一个好邻居允许其他进程使用你释放的内存,并有助于保持整个系统的稳定。
  • 你不知道你的程序可能运行多长时间。有些人休眠他们的会话(或者永远不要关闭他们的计算机),并可能让你的程序运行多年。

还有很多其他的原因,我建议研究内存分配的更多细节的做和不该做的。

1

我明白你的观点,哪些电脑有很多的记忆,但你错了。作为一名工程师,您必须创建程序,正确使用计算机资源。

想象一下,你制作的程序一直运行,然后计算机开启。它有时会用“新”来创建一些对象/变量。一段时间后,你不再需要它们,而且不会删除它们。这种情况不时出现,你只是让一些内存缺货。一段时间后,用户必须终止程序并重新启动。它并没有那么糟糕,但它并不那么舒服,更重要的是,你的程序可能会加载一段时间。因为这些用户对你愚蠢的决定感到不好。

另一件事。然后你使用“new”来创建你调用构造函数的对象和“删除”调用析构函数。假设你需要打开这样的文件,并且析构函数关闭它,并使其在其他进程中可访问,这种情况下,不仅会压缩内存,还会压缩来自其他进程的文件。

如果不希望使用“删除”就可以使用共享指针(它有垃圾收集器)。 它可以在STL中找到,std :: shared_ptr,它有一个缺点,WIN XP SP 2和更旧版本不支持这个。所以如果你想为公开创建一些你应该使用boost,它也有boost :: shared_ptr。要使用提升,您需要从here下载并配置您的开发环境以使用它。