2 c hardware gcc memory-leaks virtual-machine
我正在学习 C,并且担心内存泄漏。我知道重启通常会刷新内存,假设我不再运行该程序,我会没事的。我正在考虑使用第二台大功率机器。如果出现以下情况,我会搞砸我的系统有多严重:
以下任何事情会对我的系统产生长期影响吗?谢谢。
如果你的产品是纯软件,你最需要担心的就是内存泄漏,最终导致机器内存不足,无法再分配,应用程序将崩溃。很多记忆不会重复发生,甚至不会走到这一步。当应用程序退出时,它们将消失。如果在崩溃时修改了某些内容,您的应用程序也可能会损坏数据,但这可能适用于任何类型的崩溃。
如果您的产品以某种方式控制硬件,则需要非常小心。如果软件失败,那么您不知道硬件可能会做什么。正如其中一条评论所说,存在内存泄漏导致坠毁的宇宙飞船可能会导致宇宙飞船坠毁。机器人可能会意外移动并造成财产损失或人员伤害。其他设备可能会导致放电。
至于处理内存泄漏,你只需要小心。在 C 中,任何对malloc和类似函数的调用都需要与所有执行路径free上的调用配对。如果发生某种类型的错误,如果应用程序要继续运行,仍然需要调用。同样,应该与. 在这里,您还可能遇到文件句柄用完的问题,这是一个不同但在许多方面相似的问题。在 C++ 中,手动内存分配应该与 配对,尽管使用“智能”指针,如,freefopenfclosenewdeletestd::unique_ptrstd::shared_ptr和std::weak_ptr可以简化内存管理并防止内存泄漏。其他库也提供使用引用计数来处理自己生命周期的指针类型。我建议您在任何时候都可以使用这些原始指针。如果您可以选择使用 C++ 而不是 C,我也建议您这样做。在大多数情况下(性能或其他),您实际上并不需要 C 而不是 C++。如果您不确定是否需要 C,则可以使用 C++。
如果您对查找内存泄漏感兴趣,请查看valgrind。它有很多功能可以帮助您找到内存泄漏并确定其严重性。