gpt4 book ai didi

.net - .NET 堆栈与 Windows 堆栈

转载 作者:行者123 更新时间:2023-12-04 11:30:54 25 4
gpt4 key购买 nike

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

初始线程的堆栈大小取自图像——没有办法
指定另一个尺寸。

据我所知,对于 Windows 操作系统,每个线程被赋予 4K 或 16K(取决于系统)堆栈,并且大小是固定的。

那么.NET 中的堆栈呢?

  • 堆栈有多大?
  • 堆栈的大小是固定的还是可变的?
  • 为每个线程分配的堆栈是否与 Windows 的情况一样?
  • 最佳答案

    是的,启动线程的大小由 .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)"

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

    关于.net - .NET 堆栈与 Windows 堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088448/

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