寫在C便攜式功能(沒有組件),該返回嘗試它的堆棧幀便攜式函數,返回它的堆棧幀的大小
int stackframe_size()
{
}
的解決它的大小below - 該函數在使用VS 2010進行編譯時返回228個字節。有沒有一種方法可以驗證其正確性?
int stackframe_size(int run)
{
int i ;
if(!run)
{
return ((int)(&i) - stackframe_size(++run));
}
return (int)(&i);
}
援引爲:
int main()
{
printf("\nSize of stackframe_size() is: %d bytes",stackframe_size(0)) ;
return 0;
}
:)我問這個,因爲我想檢查是否有一個聰明/清潔的方式來做到這一點,而無需添加讀取參數地址的本地變量(比如使用遞歸技術)。 – Electrix 2015-02-06 03:49:15
聽起來像是一個很好的技術給我。也許你應該分享這些代碼,並解釋它的工作原理和結果。 – user3386109 2015-02-06 03:55:20
你不能擁有這樣的*便攜*功能。一個假想的整體程序優化編譯器可能*有時*沒有任何堆棧生成代碼;人們可以想象一些沒有堆棧的C編譯器(但是在一些垃圾收集堆中分配所有的調用幀,就像SML/NJ一樣)。所以原則上,甚至不需要堆棧。但是我知道沒有這種奇怪的C實現沒有堆棧! – 2015-02-06 16:54:36