有人知道在Unix / Linux操作系统上创建的线程分配了多少默认内存? 对于Windows xp OS,我发现它分配了一个1MB的内存块,这是正确的吗?
提前致谢。
答案 0 :(得分:1)
这个问题没有一个答案。
事实上,Windows上甚至没有一个答案。不同的可执行文件指定不同的堆栈限即使在单个进程中,单个线程也可能具有不同的堆栈限制。
当您考虑.net和本机可执行文件之间的差异时,它会变得更加复杂。相当奇怪的.net可执行文件在线程启动后立即为每个线程提交整个堆栈分配。另一方面,本机可执行文件保留堆栈分配,然后使用保护页面按需提交内存。
答案 1 :(得分:0)
您可以使用ulimit -s
查看为线程堆栈分配的空间量(以千字节为单位)。
在Linux / x86-32上,默认堆栈 新线程的大小是2兆字节。 在NPTL线程下 实现,如果是RLIMIT_STACK 当时的软资源限制 程序启动有其他任何价值 比“无限”,它决定了 新线程的默认堆栈大小。 使用pthread_attr_setstacksize(3), 堆栈大小属性可以是 在attr参数中显式设置 用来创建一个线程,以便 获得除了之外的堆栈大小 默认值。