Visual Studio 2010 SP1,32 位 exe,戴尔酷睿 i7。
为清晰而编辑:
我正在追逐生产代码中的一个小内存泄漏。它使用在工作线程上执行的 lambda 将事件分派给侦听器。这是一个关于如何导致泄漏的提炼示例。如果您让它运行足够长的时间(几分钟),该样本就会泄漏。谁能告诉我为什么?我敢肯定,当它被指出时,我会踢自己。谢谢。
#include "stdafx.h"
#include <process.h>
#include <cassert>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
//////////////////////////////////////////////////////////////////////////
template <class Func>
static void __cdecl WorkerThreadProc(void* pData) {
assert(pData != nullptr);
Func* pFunc = static_cast<Func*>(pData);
(*pFunc)(); // Execute the task.
delete pFunc; // Clean up.
}
//////////////////////////////////////////////////////////////////////////
template <class Func>
static void BeginThread(Func fn) {
Func* pFn = new Func(fn);
if (_beginthread(WorkerThreadProc<Func>, 0, pFn) == -1L) {
errno_t err;
_get_errno(&err);
assert(false);
delete pFn; // Clean up.
}
}
//////////////////////////////////////////////////////////////////////////
int main(int, char**)
{
printf_s("CTRL-C to quit:\n");
while (true) {
BeginThread( []()->void{} ); // Launch worker to execute task.
}
return 0;
}