为什么要正确释放分配的内存
Why should the allocated memory be released properly?
我一直认为,无论何时使用"new"初始化指针,分配的内存都将用于该指针,即使在编程的应用程序终止后也是如此。直到我发现,一旦应用程序关闭,操作系统显然会清除内存,这让我有点困惑,因为如果是这样的话,那么如果应用程序关闭后内存泄漏被清除,为什么游戏或其他应用程序中的内存泄漏会成为这样的问题?
True,当您终止程序时,操作系统将释放您在程序中分配的所有内存。
但这个故事背后有两个重要因素。
-
如果您的程序分配了内存,而这些内存被泄露,那么您实际上是在计算机内存中创建了一些区域,这些区域既不能被您的应用程序使用,也不能被并行运行的另一个应用程序使用。如果你期望你的程序寿命长,这是不好的。如果泄漏发生在长循环内,可能会使整个系统窒息。
-
如果您的程序是某种单实例DLL(例如Windows进程内/进程外COM服务器),那么整个系统都会出现问题。这是因为即使用户存在使用DLL的程序,操作系统也不会立即卸载DLL
编写程序不仅仅是在代码中放置逻辑。它总是关于准确高效地管理您的资源。资源总是有限的。
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 在函数中分配内存时出现问题
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- constexpr new 如何分配内存?
- 在构造函数中分配内存失败是如何冒泡的
- LLVM 传递以在特定地址分配内存
- CudaMalloc 在分配内存时失败
- 为什么它在不分配内存的情况下工作正常
- 为什么在正确解除分配内存时出现内存泄漏?
- 如何通过 malloc 为队列数组分配内存?
- vector是否为std::移动的对象连续分配内存
- 删除类成员的动态分配内存的最佳方法是什么
- 唯一指针是否在堆或堆栈上分配内存?
- 如果不分配内存,我如何能够为变量创建和分配值?
- std::initializer_list 堆是否分配内存?
- 如何按顺序或在指定的地址分配内存?
- 是否可以使用 malloc 为类对象分配内存?
- 迭代器是否分配内存(如指针)?