gpt4 book ai didi

multithreading - .NET最大线程堆栈大小?

转载 作者:行者123 更新时间:2023-12-03 23:12:52 25 4
gpt4 key购买 nike

C#.NET 2.0中的线程允许的最大堆栈大小是多少?另外,此值是否取决于CLR的版本和/或基础OS的位数(32或64)?
我看过以下资源msdn1msdn2
public Thread(
ThreadStart start,
int maxStackSize
)

我可以看到的唯一信息是默认大小为1兆字节,在上述方法中,如果maxStackSize为'0',则将使用可执行文件头中指定的默认最大堆栈大小,我们可以更改的最大值是多少? header 中的值最多?还建议这样做吗?谢谢。

最佳答案

作为记录,这符合Raymond Chen的类别:“如果您需要知道,那说明您做错了事”。

运行64位代码的线程的默认堆栈大小为4兆字节,对于32位代码为1兆字节。尽管Thread构造函数使您可以将整数值传递给int.MaxValue,但您永远不会在32位计算机上获得该值。堆栈必须适合虚拟内存地址空间中的可用孔,通常在进程生命周期的早期会达到600 MB。当您分配内存并分割地址空间时,它会迅速变小。

分配更多的默认值是没有必要的。当您有一个严重的递归方法会破坏堆栈时,您可能会考虑这样做。不要修复此算法,否则当任务变大时,您还是会吹牛。

.NET让您选择的最小堆栈为250 KB。如果您传递较小的值,它将无提示地将其四舍五入。这是必要的,因为抖动和垃圾收集器都需要堆栈空间才能完成工作。同样,这样做完全没有必要。如果您打算这样做是因为您有很多线程,并且消耗了所有虚拟内存及其堆栈,那么您的线程太多了。 StackOverflowException是您可以获得的最讨厌的运行时异常之一。进程死亡是立即发生的,无法陷阱。

主线程的堆栈大小由EXE header 中的选项确定。编译器没有更改它的选项,您必须使用editbin.exe/stack来修补.exe header 。

关于multithreading - .NET最大线程堆栈大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507574/

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