我正在学习C,并且担心内存泄漏。我知道重启通常会刷新内存,假设我不再运行程序,我会没事的。我正在考虑使用第二台大功率机器。如果出现以下情况,我的系统搞砸了多少:
以下任何一项都会对我的系统产生长期影响吗?感谢。
答案 0 :(得分:2)
如果您的产品是纯软件,那么您最担心的是内存泄漏并最终导致机器内存不足,无法再分配,应用程序将崩溃。很多记忆不会反复发生,甚至没有得到这么远。当应用程序退出时,它们将消失。如果某些内容在崩溃时被修改,您的应用程序也可能会损坏数据,但这可能适用于任何类型的崩溃。
如果您的产品以某种方式控制硬件,则需要非常小心。如果软件出现故障,那么您就不知道硬件可能会做什么。正如其中一条评论所说,一艘内存泄漏导致其崩溃的宇宙飞船可能会使宇宙飞船坠毁。机器人可能意外移动并造成财产损失或人身伤害。其他设备可能会导致放电。
就处理内存泄漏而言,你必须要小心。在C中,任何对malloc
和类似功能的调用都需要与所有执行路径上的free
调用配对。如果发生某种类型的错误,如果应用程序将继续运行,仍需要调用free
。同样,fopen
应与fclose
配对。在这里,您还可能遇到文件句柄用尽的问题,这在很多方面都是一个不同但类似的问题。在C ++中,new
的手动内存分配应与delete
配对,尽管使用" smart"像std::unique_ptr
,std::shared_ptr
和std::weak_ptr
这样的指针可以简化内存管理并防止内存泄漏。其他库还提供使用引用计数来处理其自身生命周期的指针类型。我建议你可以在任何时候使用这些原始指针。如果您可以选择使用C ++而不是C,我也建议您这样做。在大多数情况下(性能或其他方面),您并不需要C over C ++。如果您不确定是否需要C,则可以使用C ++。
如果您对查找内存泄漏感兴趣,请查看valgrind。它具有许多功能,可以帮助您查找内存泄漏并确定其严重性。
答案 1 :(得分:2)
内存泄漏不会损坏您的机器。当程序终止时,它的所有瞬态资源都会被释放,包括分配给它的任何内存。
你的编程风格会受到什么影响。正确地释放资源并不困难,但需要一些练习。过了一会儿,你需要少考虑才能做到这一点。这是让你成为优秀程序员的事情之一。
为什么重要?因为迟早,您将开始编写运行很长时间的程序,可能是信息服务器,Web浏览器或图形编辑器。在用户不再需要它之前保持活动状态的东西,或者在耗尽所有可用内存后崩溃的东西。而且你不想对第二个结果负责。
所以现在,当你开始时,是时候养成一些好习惯了。了解如何正确行事,您不必在以后重新学习。
答案 2 :(得分:1)
根据评论中的答案:
感谢您的快速解答!