2011-07-04 55 views
0

有人知道有多少默認內存分配給在Unix/Linux操作系統上創建的線程? 對於Windows XP操作系統,我發現它分配1MB的內存塊,是否正確?Unix/Linux線程的默認內存塊?

在此先感謝。

回答

0

ulimit -s可以看到爲線程堆棧分配了多少空間(以千字節爲單位)。

pthread_create(3) manpage報價:

在Linux/X86-32,默認的堆棧 大小爲一個新的線程爲2兆字節。 根據NPTL線程 執行,如果當時的RLIMIT_STACK 軟資源限制的 程序啓動了其它 不是「無限」的任何值,那麼它決定 的新線程的默認堆棧大小。 使用pthread_attr_setstacksize(3), 堆棧大小屬性可以是 在用於創建線程,爲了 獲得比 默認以外的堆棧大小的ATTR參數 顯式設置。

+0

'ulimit -s'只返回最大堆棧大小;不是默認值。 – DaveR

+0

如果創建線程時未指定堆棧大小,ulimit -s應該返回默認大小,這是否正確? – reonyag

+0

@reonyang:是的,正確的,(除非'ulimit -s'返回'無限') – ninjalj

1

這個問題不會有單一的答案。

事實上,在Windows上甚至沒有單一的答案。不同的可執行文件指定不同的堆棧限制即使在單個進程中,單個線程也可以具有不同的堆棧限制。

當您考慮.net和本機可執行文件之間的差異時,它會變得更加複雜。奇怪的是,一旦線程啓動,net可執行文件將爲每個線程提交整個堆棧分配。另一方面,本地可執行文件保留堆棧分配,然後使用防護頁按需提交內存。