2008-09-01 78 views

回答

6

有沒有辦法確定我會在什麼時候遇到堆棧溢出?

不是。當你用盡堆棧空間堆棧溢出發生 - 不過......

  • 初始堆棧大小可以通過編程改變並且可能默認爲根據您的OS /編譯器不同量的/ etc
  • 多少錢呢已經用完了,取決於你的應用程序(以及你的應用程序使用的庫)以前做過的事情 - 這通常是不可能預測的
  • 每次調用需要多少堆棧取決於你在函數中做了什麼。如果你只在堆棧中分配1個整數,你可能會遞減一個很大的時間,但是如果你在堆棧上分配一個200k的緩衝區,不是那麼多。

我曾經碰到過的唯一一次是在無限循環中,或者使用上述的200k緩衝區。

我發現它比我的應用程序更容易崩潰,比它使用100%CPU永遠循環並且必須被強制殺死(這是遠程服務器上的正確PITA,因爲窗口不足SSH)

一個粗略的指南:你認爲你的遞歸函數有可能自稱超過連續10,000次?還是你在做一些愚蠢的事情,比如在堆棧上分配200k緩衝區?

如果是,請擔心。
如果不是,繼續進行更重要的事情。

2

是的。但從來沒有死代碼。那會很愚蠢。

+0

它還沒死!它正在尋找峽灣。 – Aardvark 2008-09-24 13:16:56

0

當然 - 例如如果你想遍歷一個樹結構你還會使用什麼?

也許你想有一個像最大深度的東西,以確保你不寫無限循環。 (如果這是有道理的在你的例子)

0

有沒有一種方法來確定在什麼 點我會遇到一個堆棧溢出 ?

取決於你走得有多深,以及實際遞歸有多大。我認爲你明白遞歸做什麼?

0

遞歸對遍歷文件結構(如文件夾/目錄)來說幾乎是必不可少的。

如果使用遞歸,遍歷樹狀結構非常容易。