进程的内存使用量为什么越来越大

时间:2022-02-13 23:22:37
我写了个控制台程序text.exe,也没做什么,为什么进程的内存使用量越来越大呢,哪里出了问题。
text.exe代码如下:
// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <process.h>

void cdecl EventLoop(void* pl)
{
free(pl);
_endthread();
return;
}

void MakeThread()
{
void* pp=(void*)malloc(1024);
_beginthread(EventLoop,0,pp);
}

int _tmain(int argc, _TCHAR* argv[])
{
::Sleep(5000);

while(true)
{
for (int a=0;a<20000;a++)//创建多个线程。
{
MakeThread();
}

/*
进程进入空闲状态,查看任务管理器,随着时间的流逝,我发现进程使用的内存大小缓慢增加。
我观察了二十多分钟。
*/
for (int b=0;b<7;b++) 
{
Sleep(1000);
}
}

return 0;
}

7 个解决方案

#1


你开启线程和malloc都有分配内存,虽然你在线程内free掉了,但是操作系统在内存管理这块是有一定机制的,它并不会立即还给系统,会等一会在归还。

如果你运行时间长了,内存会有下降,并最终稳定在一个范围内。

#2


任务管理器里面打开句柄数那一项,看看是不是句柄数在增加呢

HANDLE hThread = (HANDLE) _beginthread(EventLoop,0,pp);
CloseHandle(hThread);

#3


你用malloc分配了堆内存,那肯定越来越大啊,它与线程是没有关联的

#4


你开始分配太多内存。系统还没有回收。

#5


 void* pp=(void*)malloc(1024);

在哪free?

#6


你那个3G驱动那个问题 最后怎么解决的,我也遇到你那种情况了,好几天没弄出来。。。求指教。   我QQ289085906

#7


内存释放的页没有马上换出吧

#1


你开启线程和malloc都有分配内存,虽然你在线程内free掉了,但是操作系统在内存管理这块是有一定机制的,它并不会立即还给系统,会等一会在归还。

如果你运行时间长了,内存会有下降,并最终稳定在一个范围内。

#2


任务管理器里面打开句柄数那一项,看看是不是句柄数在增加呢

HANDLE hThread = (HANDLE) _beginthread(EventLoop,0,pp);
CloseHandle(hThread);

#3


你用malloc分配了堆内存,那肯定越来越大啊,它与线程是没有关联的

#4


你开始分配太多内存。系统还没有回收。

#5


 void* pp=(void*)malloc(1024);

在哪free?

#6


你那个3G驱动那个问题 最后怎么解决的,我也遇到你那种情况了,好几天没弄出来。。。求指教。   我QQ289085906

#7


内存释放的页没有马上换出吧