C++ 内存使用率不是';使用免费软件时不会减少吗?

C++ 内存使用率不是';使用免费软件时不会减少吗?,c++,memory-leaks,C++,Memory Leaks,不知何故,对free()的调用不起作用。我在Windows上运行了这个应用程序,并跟踪了任务管理器中的内存使用情况,但在调用free()之后,内存使用没有减少 intmain(intargc,char*argv[]) { int i=0; int*ptr; ptr=(int*)malloc(sizeof(int)*1000); 对于(i=0;i

不知何故,对
free()
的调用不起作用。我在Windows上运行了这个应用程序,并跟踪了任务管理器中的内存使用情况,但在调用
free()
之后,内存使用没有减少

intmain(intargc,char*argv[])
{
int i=0;
int*ptr;
ptr=(int*)malloc(sizeof(int)*1000);
对于(i=0;i<1000;i++)
{
ptr[i]=0;
}
free(ptr);//此调用后,程序内存使用不会减少
系统(“暂停”);
返回0;
}

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

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


通常,libc会将内存分配成更大的块,以便为几个malloc调用提供内存。

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

谢谢JeaDaar,“所有的,我的语法是绝对正确的?是的……你正在正确地释放内存。这是C++,不是C。也许重新标记是有道理的?加尔文:是的,程序没有错。只是C运行时将内存保留在进程中(好吧,有一件事:您包括iostream,但随后使用stdio。但这与内存使用无关)
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;
}