gpt4 book ai didi

c++ - 内存泄漏的长期后果是什么?

转载 作者:IT王子 更新时间:2023-10-28 23:35:08 27 4
gpt4 key购买 nike

假设我有一个这样的程序:

int main(void)
{
int* arr = new int[x];
//processing; neglect to call delete[]
return 0;
}

在这样一个简单的例子中,我认为忽略释放为 arr 分配的内存几乎没有什么实际危害,因为它应该在程序完成运行时由操作系统释放。然而,对于任何重要的程序,这被认为是不好的做法,并且会导致内存泄漏。

我的问题是,在不平凡的程序中内存泄漏的后果是什么?我意识到内存泄漏是不好的做法,但我不明白为什么它们不好以及它们会造成什么麻烦。

最佳答案

内存泄漏会通过减少可用内存量来降低计算机的性能。最终,在最坏的情况下,可能会分配过多的可用内存,并且系统或设备的全部或部分停止正常工作、应用程序失败或系统由于抖动而无法接受地变慢。

内存泄漏可能并不严重,甚至无法通过正常方式检测到。在现代操作系统中,应用程序使用的正常内存在应用程序终止时被释放。这意味着程序中的内存泄漏只运行了很短的时间可能不会被注意到并且很少严重。

更严重的泄漏包括:

  • 程序运行时间延长并随时间消耗额外内存的地方,例如服务器上的后台任务,尤其是在可能运行多年的嵌入式设备中
  • 经常为一次性任务分配新内存,例如渲染计算机游戏或动画视频的帧时
  • 程序可以请求未释放的内存(例如共享内存),即使程序终止
  • 内存非常有限,例如在嵌入式系统或可移植设备中
  • 在操作系统或内存管理器中发生泄漏的位置
  • 当系统设备驱动程序导致泄漏时
  • 在程序终止时不会自动释放内存的操作系统上运行。通常在此类机器上,如果内存丢失,只能通过重新启动来回收,AmigaOS 就是此类系统的一个示例。

查看 here了解更多信息。

关于c++ - 内存泄漏的长期后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com