2017-06-10 29 views
-2
  1. 有人可以解釋爲什麼我們確實需要堆棧幀嗎?
  2. 它的核心目的是什麼?
  3. 它有什麼好處?
  4. 是不是隻有一個堆棧指針足以推動和彈出 元素從堆棧,而不是使用任何幀?
  5. 這裏Stack Frames,它提到堆棧幀是一個內存管理技術......它是如何一種內存管理技術?
+0

不,這些都不是家庭工作問題... – Aimal

+0

您是否在詢問*堆棧幀*本身或*幀指針*? – EOF

+0

兩種。幀指針屬於堆棧幀的主題。 – Aimal

回答

1

有人可以解釋爲什麼我們需要堆棧幀嗎?
它的核心目的是什麼?
它有什麼好處?

我認爲這些都是類似的問題。堆棧幀提供了一種手段,

  1. 跟蹤調用堆棧;用於調試。
  2. 一種創建更大數組,結構和其他函數數據的方法。
  3. 一個相當快的訪問溢出變量。
  4. 允許條件執行(和遞歸)子功能。
  5. 可以簡化signal的處理。

對於沒有大量寄存器的計算機,原因'3'更重要。無論上述項目是「核心目的」,其利益還是需要都是主觀的。他們都是有堆棧的理由。由於上述原因,是否需要堆棧幀取決於應用程序設計者。

是不是隻有一個堆棧指針足以只是從棧中推入和彈出元素而不使用任何幀?

在大多數情況下,push/pop是足夠的,但它可能不是有效的;實際上在較新的ARM'應用程序二進制接口'(ABI)中,它不是必需的,gcc提供了使用/不使用堆棧幀的選項。在沒有使用堆棧幀的情況下提供堆棧跟蹤顯然比較困難。 /彈出變得不那麼直向前遞歸,可變分配(ALLOCA),函數指針等

在此棧幀,應提到的是堆棧幀

推是一個存儲器管理技術...如何它是一種內存管理技術嗎?

它以簡單的方式管理內存。在'最後的請求'是'第一免費'的情況下,堆棧和幀指針是完美的。 Gnu Objstack與此類似。