2009-10-11 172 views
1

我想知道在gcc C中允許的(遞歸)函數調用的最大次數是多少。我有一個程序可以使用堆棧深度爲400000的函數調用,每個調用的大小爲大約200字節(大約80 MB)。我怎樣才能增加最大深度?在C(gcc)中函數堆棧的最大大小

+3

您確定要深入?我認爲這是很多遞歸。您可以嘗試使其迭代。 – GManNickG 2009-10-11 05:27:40

+0

我正在爲DP進行記憶。它是一個3×3矩陣的問題,將一個配置轉換爲其他配置。我不能讓它迭代。 – avd 2009-10-11 05:31:07

+1

@aditya:所有遞歸算法都可以迭代;通常很難這樣做,你可能不知道如何去做。 – 2009-10-11 05:51:32

回答

8

堆棧限制不是由編譯器強加的,而是由操作系統強加的。在Unix上,你可以嘗試使用ulimit(1)來增加它。

+0

特別是'ulimit -s' – caf 2009-10-11 05:35:53

3

我會推薦重寫例程爲迭代算法。雖然不平凡,但它應該是直接轉換算法,並且將免除您必須處理這些資源限制(我猜,這可能會因體系結構,平臺,計算機詳細信息等而異)。

另請注意:所有遞歸算法can be written迭代。

+0

我正在爲DP進行記憶。它是一個3×3矩陣的問題,將一個配置轉換爲其他配置。迭代很困難。 – avd 2009-10-11 05:32:35