簡體   English   中英

如何在Mac OS X上通過C API獲取當前線程的堆棧大小? (無可可或碳)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM