【发布时间】:2010-04-30 12:25:38
【问题描述】:
每个线程有 1 Mb 的堆栈吗?还是只是 CLR 线程?
我想通过任务管理器查看本地 Windows 线程 (c++) 和 CLR 线程的头顶内存。
谢谢
【问题讨论】:
标签: c# c++ multithreading
每个线程有 1 Mb 的堆栈吗?还是只是 CLR 线程?
我想通过任务管理器查看本地 Windows 线程 (c++) 和 CLR 线程的头顶内存。
谢谢
【问题讨论】:
标签: c# c++ multithreading
【讨论】:
请参阅 Mark Russinovich 关于 win32 内核 limits 的博客,了解单个线程有多大,以及使用了多少开销。
.NET 线程使用多少资源很难预测。我猜,不多。
【讨论】:
内存开销(在 RAM 中)将是一个内存页。所以(取决于您的平台)这可能是 4KB。
两者的默认堆栈大小均为 1MB。然而,这只是虚拟内存,所以除非使用它,否则没有 RAM 开销。
【讨论】:
根据前面的答案,基本开销是每个线程 1MB。我不会讨论各种细微差别 - 其他答案已经涵盖了它们。
对于 Microsoft Visual C/C++ 线程,您还拥有按需分配(并使用线程本地存储 TlsAlloc() 存储)的任何 C 运行时工作区的每个线程开销,以执行诸如 sprintf()、scanf( )、strtol() 等。我没有任何确切的数字 - 您需要将源扫描到 Microsoft CRT 来计算。
对于其他 C/C++ 运行时 (gcc/g++/borland/digital mars),可能会或可能不会保存类似的每线程数据,这是一个实现细节。
我们都不知道 .Net 执行引擎的内部结构,但那里可能也存储了一些每个线程的数据。不过很难弄清楚开销是多少。
【讨论】: