使用免费时,内存使用量不会减少?

时间:2009-10-12 17:57:57

标签: c++ memory-leaks

以某种方式调用free()无效。我在Windows上运行此应用程序并在任务管理器中使用内存,但在调用free()后没有看到内存使用量减少。

int main(int argc, char *argv[])
{
    int i=0;
    int *ptr;

    ptr = (int*) malloc(sizeof(int) * 1000);

    for (i=0; i < 1000; i++)
    {
        ptr[i] = 0;
    }

    free(ptr); // After this call, the program memory usage doesn't decrease

    system("PAUSE");

    return 0;
}

3 个答案:

答案 0 :(得分:13)

典型的C实现不会返回free:d内存到操作系统。它可以由同一个程序使用,但不能供其他程序使用。

答案 1 :(得分:2)

您不能假设在执行free后,内存将返回到操作系统。通常,CRT实现有一些优化,因为它们可能不会立即返回此内存。这允许CRT以更快的方式分配后续的内存分配请求。

答案 2 :(得分:1)

请注意,任务管理器将显示libc从系统“借用”的内存。但并非所有malloc都会通过libc进入操作系统,同样不是所有的malloc都会释放系统内存。

通常,libc将以更大的块分配内存以提供多个malloc调用。