【问题标题】:1 thread = 1,000,000 bytes. Is that true?1 个线程 = 1,000,000 字节。真的吗?
【发布时间】:2016-09-19 02:28:21
【问题描述】:
所以我在读 this thread on MSDN 上面写着
这种并发引入了许多众所周知的困难。
首先,线程是出了名的重量级;默认为一个线程
为其堆栈消耗一百万字节的虚拟内存和许多
其他系统资源。
我想知道这个数字是从哪里来的。 Windows 操作系统中是否有一些常量可以为线程提供 1,000,000 字节的内存?这个号码是怎么来的?它是否确定在进程所需的平均字节数附近?
【问题讨论】:
标签:
.net
windows
multithreading
operating-system
threadpool
【解决方案1】:
默认情况下,windows 默认分配 1MB 的虚拟内存。 This link
更深入地解释
【解决方案2】:
关于dwStackSize 参数的CreateThread 的文档说
dwStackSize [in]
堆栈的初始大小,以字节为单位。系统将此值四舍五入到最近的页面。如果此参数为零,则新线程使用可执行文件的默认大小。如需更多信息,请参阅Thread Stack Size。
以下链接显示
链接器使用的默认堆栈保留大小为 1 MB。
所以如果在调用 CreateThread 时创建线程时没有指定堆栈大小,则默认分配为 1 MB(1,048,576 字节),大约为一百万字节。为什么选择这个数字作为默认值不是我们可以在这里回答的任何问题,因为在二十多年前(当时正在开发 Windows 95 和 NT 4.0 ) 将阅读这篇文章。