如果C中的exit(exitcode)发生内存泄漏



在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程序完成执行后释放未显式释放的内存。因此,在正常情况下,您可以这样做而不会产生任何后果。事实上,有一些思想流派不建议在程序执行即将结束时释放内存,因为这是不必要的。但是,如果您正在处理旧的或不寻常的操作系统,这可能是危险的。在其中一些系统中,可能需要重新启动才能再次释放内存。

相关内容

  • 没有找到相关文章

最新更新