.NET堆栈与Windows堆栈

.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

第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中的堆栈呢

  • 这堆东西有多大
  • 堆栈的大小是固定的还是可变的
  • 为每个线程分配的堆栈是否与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,则不能使其太小。这是必要的,即时编译器也使用堆栈。

      相关: