8.27 alloca() 是什麼?為什麼不提倡使用它?

在調用 alloca() 的函數返回的時候, 它分配的內存會自動釋放。也就是說, 用 alloca 分配的內存在某種程度上局部於函數的 ``堆棧幀"  或上下文中。

alloca() 不具可移植性, 而且在沒有傳統堆棧的機器上很難實現。 當它的返回值直接傳入另一個函數時會帶來問題, 如  fgets(alloca(100), 100, stdin)。

由於這些原因, alloca() 不合標準, 不宜使用在必須廣泛移植的程序中, 不管它可能多麼有用。 既然 C99 支持變長數組(VLA), 它可以用來更好的 完成 alloca() 以前的任務。

參見問題 7.19

參考資料: [Rationale, Sec. 4.10.3]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)