以某种方式调用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;
}
答案 0 :(得分:13)
典型的C实现不会返回free:d内存到操作系统。它可以由同一个程序使用,但不能供其他程序使用。
答案 1 :(得分:2)
您不能假设在执行free
后,内存将返回到操作系统。通常,CRT实现有一些优化,因为它们可能不会立即返回此内存。这允许CRT以更快的方式分配后续的内存分配请求。
答案 2 :(得分:1)
请注意,任务管理器将显示libc从系统“借用”的内存。但并非所有malloc都会通过libc进入操作系统,同样不是所有的malloc都会释放系统内存。
通常,libc将以更大的块分配内存以提供多个malloc调用。