.NET堆栈与Windows堆栈
第360页有以下评论 The stack size for the initial thread is taken from the image—there’s no way to specify another size. 初始线程的堆栈大小是从图像中获取的,这是不可能的 指定另一个大小。 我知道对于Windows操作系统,每个线程都有4K或16K(取决于系统)堆栈,并且大小是固定的 那么.NET中的堆栈呢.NET堆栈与Windows堆栈,.net,stack,.net,Stack,第360页有以下评论 The stack size for the initial thread is taken from the image—there’s no way to specify another size. 初始线程的堆栈大小是从图像中获取的,这是不可能的 指定另一个大小。 我知道对于Windows操作系统,每个线程都有4K或16K(取决于系统)堆栈,并且大小是固定的 那么.NET中的堆栈呢 这堆东西有多大 堆栈的大小是固定的还是可变的 为每个线程分配的堆栈是否与Windo
- 这堆东西有多大
- 堆栈的大小是固定的还是可变的李>
- 为每个线程分配的堆栈是否与Windows的情况相同
- 这是一个关于这个话题的话题
问题:
文档表明线程的“默认堆栈大小”为1MB。
工作“默认”意味着它可以更改
是否可以更改.NET中的堆栈大小?如果是,怎么做
答复
很遗憾,没有。您正在阅读的文档是针对
在系统中创建新线程,由Thread类处理。
createThreadAPI函数允许您设置堆栈大小,您可以
从.NET调用它。然而,我不知道这是否是一个好主意,因为我是
不确定运行时将如何感知该线程
下面是使用CreateThreadAPI创建线程的代码示例
是,启动线程的大小由.EXE文件头中的值决定。当然,是操作系统在程序中的任何代码运行之前创建了线程。它调用程序的入口点CorExeMain() 您使用的托管编译器将该值写入EXE文件头。当前的.NET编译器在以x86或任何CPU为目标时选择1 MB,在以x64为目标时选择4 MB。但是,这不是固定的,您可以使用Editbin.exe实用程序/STACK命令行选项修改该值。您可以使用此生成后事件获取2MB堆栈:
set path=%path%;$(DevEnvDir);$(DevEnvDir)..\..\vc\bin
editbin.exe /STACK:2097152 "$(TargetPath)"
您自己创建的线程的堆栈大小由您控制,线程类构造函数允许您指定大小。如果将该值剪裁为256 KB,则不能使其太小。这是必要的,即时编译器也使用堆栈。相关: