如果在C中退出(exitcode)会发生内存泄漏?

时间:2013-03-19 08:54:14

标签: c memory memory-leaks exit exit-code

在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;
}

3 个答案:

答案 0 :(得分:3)

不在现代操作系统下,没有。当进程终止时,操作系统会自动收集所有内存。

事实上,如果程序正在退出,释放内存实际上可能对性能有害。原因是调用free有时需要做很多工作 - 更新大量结构,触摸缓存行等。通过简单地退出,你不会做所有这些用户空间的废话,操作系统会负责实际取消数据的映射

答案 1 :(得分:1)

需要通过调用malloc显式释放使用free分配的所有动态分配的内存。当你的程序继续运行未分配的内存时,这种方式可能被称为泄漏(如果它没有被使用)。但是,一旦你的程序/进程返回操作系统,只需回收它分配给它的内存这个过程。操作系统无法理解 泄漏 它只是回收它为流程提供的内容。

答案 2 :(得分:1)

这取决于操作系统。所有现代操作系统(据我所知)将释放在C程序完成执行后未明确释放的内存。因此,在正常情况下,您可以避免这种情况。事实上,有些思想学派不建议在程序执行即将结束时不释放内存,因为它是不必要的。但是,如果您碰巧遇到可能很危险的旧的或不寻常的操作系统。在某些系统中,可能需要重新启动才能再次释放内存。