匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 2 年前

列舉並詳細說明為何Stack會比 Heap快 不討論java 只講c.c++?

2 個解答

評分
  • 阿明
    Lv 5
    2 年前
    最佳解答

    應該不是Stack 或 Heap資料結構的演算問題, 應該是變數配置在Stack 或 Heap記憶體區塊存取的效率問題。

    程式執行時需要配置記憶體主要分為,程式碼區段(Core) ,資料區段(.data) ,未初始化資料區段(bss) , 動態配置堆積段 (Heap) , 區域變數堆疊區段(Stack) 。

    C++使用new運算子,或是C語言malloc()函數動態的配置變數記憶體,會配置在堆積區塊(Heap),要使用物件指標去存取(或遠程指標),這樣的讀寫效率會比配置在堆疊區段(Stack)慢,尤其是保護模式的視窗作業系統,物件指標是一種記憶節區的代碼,需要跨越記憶節區來讀寫,多工保護模式跨越記憶體節區讀寫,會有讀寫權限的檢查機制速度較慢。動態配置的優點是可以配置更多記憶空間,不用了可以拋棄delete,讓其他程式使用有效率使用記憶體

  • 2 年前

    資料結構的選擇通常有以下的考量:

    1. 操作支援 - 通常有:

    A) 資料儲存

    B) 資料搜尋

    C) 資料除去

    D) 其他的管理動作,像是 資料排序,資料個數的統計

    2. 記憶體的消耗 - (與你的問題無關,不討論)

    1A,B,C) stack只能搜尋/移除最後存放的資料 所以實踐起來很簡單,也很有效率

還有問題?馬上發問,尋求解答。