1

我很好奇爲什麼大多數本地語言(包括C,C++和D)未定義堆棧溢出行爲。是否因爲它需要檢測每個堆棧變量分配和函數調用,這反過來又會使代碼變得非常慢? Evenso,只有當編譯器提供了一些額外的詳細調試標誌時,才能啓用它。本地語言中的堆棧溢出行爲

我問這是因爲我在使用C99可變長度數組(VLA)和C功能alloca編寫C++時代碼的感覺可疑。對於一些內存處理密集型算法,這可能會導致顯着的加速。

我猜這個問題已被問了很多次,但我似乎無法找到stackexchange上的相關文章。

+3

在C語言中,至少,標準甚至不需要堆棧的*存在*。這使得標準化的堆棧溢出處理有點多問。儘管如此,大量的操作系統和其他環境確實提供了這種支持。 – 2013-04-07 21:53:56

回答

0

在我看來,原因是高級語言 - 與彙編語言相反 - 應該儘可能獨立於執行程序的硬件。它們爲程序員提供了制定問題的方法,但讓編譯器以最佳方式使用硬件。
所以堆棧的概念是一個高層次的程序員不應該被打擾的東西,既沒有多少寄存器,也沒有多核CPU。