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