在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;
}
答案 0 :(得分:3)
不在现代操作系统下,没有。当进程终止时,操作系统会自动收集所有内存。
事实上,如果程序正在退出,释放内存实际上可能对性能有害。原因是调用free
有时需要做很多工作 - 更新大量结构,触摸缓存行等。通过简单地退出,你不会做所有这些用户空间的废话,操作系统会负责实际取消数据的映射
答案 1 :(得分:1)
需要通过调用malloc
显式释放使用free
分配的所有动态分配的内存。当你的程序继续运行未分配的内存时,这种方式可能被称为泄漏(如果它没有被使用)。但是,一旦你的程序/进程返回操作系统,只需回收它分配给它的内存这个过程。操作系统无法理解 泄漏 它只是回收它为流程提供的内容。
答案 2 :(得分:1)
这取决于操作系统。所有现代操作系统(据我所知)将释放在C程序完成执行后未明确释放的内存。因此,在正常情况下,您可以避免这种情况。事实上,有些思想学派不建议在程序执行即将结束时不释放内存,因为它是不必要的。但是,如果您碰巧遇到可能很危险的旧的或不寻常的操作系统。在某些系统中,可能需要重新启动才能再次释放内存。