![](/img/trans.png)
[英]How to change the stack size using ulimit or per process on Mac OS X for a C or Ruby program?
[英]How to get current thread's stack size via C API on Mac OS X? (no Cocoa or carbon)
在Unix中,有getrusage
函數來獲取資源狀態。 它也位於Mac OS X中,但不起作用。 可可上有預先實現的API(我不了解Carbon),
-[NSthread stackSize]
但是我只能用C API來實現它。
與此等效的C API是什么?
您必須在創建線程之前執行此操作,方法是初始化pthread_attr_t
對象並對其調用pthread_attr_getstacksize
。 如果您知道當前線程是使用默認屬性創建的,則可以將測試推遲到以后,但這聽起來是個壞主意。
話雖如此,我認為測試默認值還是毫無用處的。 如果知道需要大堆棧,請在創建線程之前顯式設置大堆棧大小。 如果您知道只需要一個小的堆棧,就可以對其進行顯式設置並節省內存。 我建議不要低於32k,除非您知道您不會使用任何庫函數或遞歸(在這種情況下4k可能很好),也不要大於256k,除非您打算進行深度遞歸。 為了獲得遞歸的安全堆棧大小,我粗略估算出:
levels_of_recursion * (128 + total_size_of_locals) + (using_lib ? 32768 : 4096)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.