2010-03-14 126 views
8

設計簡單的C程序來分配堆棧中的所有內容還是大部分內容都是不好的方式?C中的堆棧分配

+3

這取決於「一切」的含義。 – AraK 2010-03-14 08:27:42

+1

如果你要用當地人和參數去做所有事情,爲什麼你首先使用C?改用ML,Haskell,Erlang等功能語言代替。 – 2010-03-14 08:30:23

+0

與之相對,你在想什麼?全局變量或堆上的數據? – 2010-03-14 08:37:27

回答

16

如果你不需要它,使用堆分配是不好的風格。尤其在簡單的程序中。

+2

如果可以,我會超過+1。堆棧分配是安全的,防止內存泄漏,並避免空指針或垃圾指針問題。儘可能使用它。 – kyoryu 2010-03-14 08:43:21

+1

+1 - 絕對 - 堆是比堆棧更復雜的數據結構,在許多情況下不僅是不必要的開銷,而且還會導致潛在問題(如懸掛指針,內存泄漏,堆損壞等)造成不必要的複雜性。沒有理由在需要時避免堆,但肯定是「需要時」選項,而不是合理的默認選項。 – Steve314 2010-03-14 08:45:34

+0

而且在C中沒有堆。 – 2010-03-14 08:54:16

1

如果我們把重點放在SIMPLE程序上,就像你說的那樣,那麼不,那不是那麼糟:)你也可以看看C99可變長度數組(這裏是一個簡單的例子:http://en.wikipedia.org/wiki/Variable-length_array)。

+0

+1提及VLA。我在一個小型項目中使用它們,並且他們大部分時間幫助避免堆分配。 – helpermethod 2010-03-14 10:04:00

0

不需要,除非你有變量具有不固定的大小。這樣的代碼可能會很快導致堆棧溢出。

3

堆棧分配比堆分配便宜。從堆棧分配和取消分配只是簡單的計數器增量和遞減函數(或更準確地說:範圍)進入/退出。堆分配意味着在可能分散的地址空間中找到足夠大的內存塊。由於該堆棧分配幾乎總是可取的。

不使用堆疊中的主要理由是:

  • 所需的尺寸是未知的,直到運行時間。
  • 需要大量內存(兆字節);這可能會導致堆棧大小通常限制爲兩位數兆字節的系統出現問題。
+2

或者如果需要大量內存(千字節)這可能會導致堆棧大小通常限制爲兩位千字節數的系統(例如PC上的設備驅動程序或大多數嵌入式系統中的任何程序)出現問題。 – Dipstick 2010-03-14 09:11:44

1

堆的主要優點是可以動態分配它。如果你不知道你需要的變量的大小:堆。

如果你的程序很簡單,你可能不需要在堆上分配一個變量;但是選擇並不取決於程序的複雜性,它取決於您對變量的需求。 如果您需要通過多種功能訪問/修改整個工作流程中的變量,那麼它在堆上更好。當你不再需要它時,你會釋放它。 如果變量只是一個選項結構或計數器,堆棧對它來說是完美的。