代码之家  ›  专栏  ›  技术社区  ›  prosseek

.NET堆栈与Windows堆栈

  •  7
  • prosseek  · 技术社区  · 14 年前

    这个 Windows Internal book 5th edition 在第360页有以下评论。

    The stack size for the initial thread is taken from the image—there’s no way 
    to specify another size.
    

    那么.NET中的堆栈呢?

    • 这堆有多大?
    • 为每个线程分配的堆栈是否与Windows的情况一样?
    2 回复  |  直到 14 年前
        1
  •  9
  •   Hans Passant    8 年前

    是的,启动线程的大小由.EXE文件头中的值决定。当然,是操作系统创建了线程, 之前 程序中的任何代码都可以运行。它调用程序的入口点CorExeMain()。

    使用的托管编译器将该值写入EXE文件头。当前.NET编译器在以x86或任何CPU为目标时选择1 MB,在以x64为目标时选择4 MB。但这不是固定的,您可以使用Editbin.exe实用程序/STACK命令行选项修改该值。您可以使用此生成后事件获取2 MB堆栈:

      set path=%path%;$(DevEnvDir);$(DevEnvDir)..\..\vc\bin
      editbin.exe /STACK:2097152 "$(TargetPath)"
    

    您自己创建的线程的堆栈大小由您控制,即线程类构造函数 has overloads 这样可以指定大小。如果将值剪辑为256 KB,则不能使其太小。这是必要的,即时编译器也使用堆栈。

        2
  •  0
  •   Robert Greiner    14 年前

    这是一个 similar discussion 关于这个话题。

    问题

    工作“默认”意味着它可以更改。

    是否可以在.NET中更改堆栈大小?如果是,怎么办?

    回答

    不幸的是没有。你读的文档是为了 在系统中创建新线程,由Thread类处理。 从.NET调用它。不过,我不知道这是不是个好主意,因为我是

    下面是使用CreateThread API创建线程的代码示例

    http://www.codeproject.com/KB/threads/Threads_1.aspx