gpt4 book ai didi

c++ - _beginthreadex 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:32 25 4
gpt4 key购买 nike

下面的代码是我的整个测试程序。每次我按 ENTER 时,进程使用的 RAM 都会增加 4k(它会不断增加,不会停止;我在任务管理器中看到它)。怎么了? _beginthread 也会发生同样的事情。

我正在尝试编写一个服务器,我想用一个线程处理每个连接。 (请注意,这意味着我无法加入线程,因为这将暂停主线程接受新连接。)

unsigned __stdcall thread_test(void *)
{
for(int i = 0; i < 10000; i++)
{
i+=1;
i-=1;
} //simulating processing

_endthreadex( 0 );
}

int main()
{
HANDLE hThread;
while(1)
{
getchar();

hThread = (HANDLE)_beginthreadex( NULL, 0, thread_test, 0, 0, NULL );
CloseHandle( hThread );
}
}

使用代码块和 visual studio 编译。

编辑:我做了一些测试,一旦内存达到 133.000K 左右,内存就会停止填满(程序启动时,内存约为 800k);但是在这个阶段,程序的运行速度比开始时慢了 4-5 倍(更高的内存 - 程序运行速度更慢),所以我的服务器这样运行并不是一件好事。

编辑 2:我有 Visual Studio 2013,问题消失了。

编辑 3:如果我在 Visual Studio 2013 中测试上面的代码,它没有泄漏。但是如果我将 beginthreadex 与一个小的服务器代码一起使用,它会像以前一样给我泄漏,每个请求都提供 4k。这是我使用的服务器测试代码(它什么都不做,只是看到它泄漏内存)http://pastebin.com/EDmJXkZU .您可以通过在浏览器的地址栏中输入您的 IP 来编译和测试它。

最佳答案

任务管理器不显示您的程序使用的 RAM。为了更好地查看,请使用任务管理器的资源监视器并观察专用字节指示。但是所有内存监视器只显示“虚拟内存”,它通常由运行时库保留,而不是释放回 Windows。你没有真正的问题。

关于c++ - _beginthreadex 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com