在C程序中,如果在使用exit(100);
执行程序出口后仍然存在未释放的动态分配内存,我们是否会遇到内存泄漏问题?例如:
int main (void) {
char str1[] = "Hello World"
char *str2;
str2 = malloc(strlen(str1 + 1));
if (str2)
exit(101); // memory leaks?
free(str2);
return 0;
}
在现代操作系统下不行。当进程死亡时,操作系统会自动收集所有内存。
实际上,如果程序退出,释放内存实际上可能对性能有害。原因是调用free
有时涉及大量的工作-更新大量的结构,触摸缓存线等。通过简单的退出,你不需要做所有这些用户空间的废话,操作系统会负责解除你的数据映射。
使用malloc
分配的所有动态分配的内存需要通过调用free
显式释放。当您的程序以这种方式继续运行时,未分配的内存可能被称为泄漏(如果它根本没有被使用)。但是,一旦程序/进程返回,操作系统就会收回它分配给该进程的内存。操作系统不理解泄漏,它只是收回它给进程的内容。
这取决于操作系统。所有现代操作系统(据我所知)都会在C程序完成执行后释放未显式释放的内存。因此,在正常情况下,您可以这样做而不会产生任何后果。事实上,有一些思想流派不建议在程序执行即将结束时释放内存,因为这是不必要的。但是,如果您正在处理旧的或不寻常的操作系统,这可能是危险的。在其中一些系统中,可能需要重新启动才能再次释放内存。