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