我有这个代码:
#include <malloc.h>
int main()
{
int x = 1000;
//~600kb memory at this point
auto m = (void**)malloc(x * sizeof(void*));
for (int i = 0; i < x; i++)
m[i] = malloc(x * sizeof(void*));
for (int i = 0; i < x; i++)
free(m[i]);
free(m);
//~1700kb memory at this point
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当程序启动时,内存消耗约为~600kb,当它结束时约为1700kb.是内存泄漏还是什么?
malloc()使用各种特定于平台的方法从系统中获取内存.但free()并不一定总是将内存返回给系统.
您可能存在的行为的一个原因是,当您第一次调用malloc()它时,它将向系统询问内存的"块",例如1 MB作为假设示例.后续调用将从相同的1 MB块中完成,直到它耗尽,然后将分配另一个块.
没有理由立即将所有已分配的内存返回系统,因为应用程序不再使用它.实际上,最可能的可能性是:(a)应用程序请求更多内存,在这种情况下,最近释放的部分可以再次发出,或者(b)应用程序终止,在这种情况下,系统可以有效地清理其分配的所有内容单个操作中的内存.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |