单个Windows线程的内存开销是多少?

时间:2010-04-30 12:25:39

标签: c# c++ multithreading

每个线程的堆栈是1 Mb吗?或者只是CLR线程?

我想通过任务管理器知道本机Windows线程(c ++)和CLR线程的内存是否为视图。

由于

4 个答案:

答案 0 :(得分:6)

nativeCLR个线程的默认值均为1 MB。你可以改变它,虽然这通常是一个坏主意。

答案 1 :(得分:3)

请参阅Mark Russinovich关于win32内核limits的博客,了解单个线程有多大,以及使用了多少开销。

.NET线程使用多少资源很难预测。我想,不多了。

答案 2 :(得分:1)

内存开销(在RAM中)将是一个内存页面。所以(取决于你的平台)这可能是4KB。

两者的默认堆栈大小为1MB。但是,这只是虚拟内存,因此除非使用它,否则不会产生RAM开销。

答案 3 :(得分:1)

根据之前的答案,每个线程的基本开销是1MB。我不会讨论各种细微差别 - 其他答案都包括在内。

对于Microsoft Visual C / C ++线程,您还具有按需分配(并使用线程本地存储TlsAlloc()存储)以执行sprintf(),scanf等工作的任何C运行时工作空间的每线程开销。 ),strtol()等我没有任何确切的数字 - 您需要扫描源到Microsoft CRT来计算。

对于其他C / C ++运行时(gcc / g ++ / borland / digital mars),可能存在也可能不存在类似的每线程数据,这是一个实现细节。

我们都不知道.Net执行引擎的内部结构,但也可能存在一些每线程数据。虽然很难弄清楚开销是多少。