有没有像 C 中的析构函数这样的机制?或者还有其他方法可以实现吗?
我的要求是,当程序终止时,应该释放在运行时分配的所有内存。我保留了一个使用分配的内存列表malloc
。
有没有像 C 中的析构函数这样的机制?或者还有其他方法可以实现吗?
我的要求是,当程序终止时,应该释放在运行时分配的所有内存。我保留了一个使用分配的内存列表malloc
。
另一种选择是编写内存管理器。
这个想法是内存管理器分配大块内存并将其划分为较小的块以供程序的其余部分使用。当程序终止时,内存管理器可以删除大块。
这是基本思想,尽管内存管理器可能需要更复杂,具体取决于程序的内存使用情况。
您可以检查 Doom 源代码中的基本内存管理器:http: //doom.wikia.com/wiki/Zone_memory
一个非常简单的解决方案是不使用malloc
. 这是一些安全关键系统采用的选项,它们只使用堆栈。
否则,只需以控制方式终止程序并在终止期间进行整理。
C++ 使用 RAII 来管理资源生命周期。
C 中没有这样的机制,因为你不能拥有结构的成员函数。您的主要关注点应该是在程序的生命周期内释放内存分配以供重用,而不是在生命周期结束时。一旦程序结束,操作系统无论如何都会回收泄漏的内存。
在 C 中做到这一点的最佳方法是,设计您的应用程序以相应地处理生命周期和代码。这包括仔细决定您是否真的需要动态内存分配,以及是否应该明确定义分配对象的生命周期。
操作系统会处理这个问题。当程序终止时,操作系统将回收该进程使用的所有内存。
在应用程序终止时,所有通过 malloc() 分配的内存都将被释放,除非应用程序成为某种僵尸进程。否则,正常终止应释放所有空间。
malloc() 函数使用操作系统调用来分配内存,当进程终止时,分配给进程的内存由操作系统回收。
我见过 Windows 下的僵尸进程案例,其中一个进程一直停留在内存中,直到它通过任务管理器应用程序终止。