首頁>Club>
7
回覆列表
  • 1 # 使用者8393353531940

    很多人的答案喜歡從棧的功能上做解釋,什麼因為棧處理只有push/pop所以小……什麼

    棧只是的名詞,我們的關注點是它的功能,棧的功能主要是函式呼叫、區域性變數申請、函式引數傳遞所使用的空間,是為函式呼叫的實現提供一些儲存、恢復操作。

    我感覺沒有回答到精髓上。我覺得要從常識邏輯來分析為什麼不推薦把data都放在棧上。其主要原因在我的經驗上來看是棧的LIFO (last in first out)儲存特性導致把data放在棧上會很浪費記憶體空間。

    好了,我們來舉個例子,你有三個大檔案,一個單核CPU,所以你要處理檔案的時候要by一步一步來。 如果我們全部都用棧的話,我們來看一下當前棧的情況:

    這個時候你弄完了Data 1, 開始弄Data 2.。。。。

    等等!這樣的話 Data 1已經沒用了,存在棧裡面太浪費了。我要把它取出來!

    嗯,這就是個問題。棧的規則是LIFO。所以你怎麼取出來呢?

    這麼一想,是不是覺得為什麼不推薦存進棧裡面了。

    那麼這時候有人可能會問,那我能不能先不全部存進記憶體裡,能不能做完1,取出1,再存2,再做2。

    能是能,但是你知道一個核心,一會兒做I/O, 一會兒ALU做計算,效率不高的……

    那麼這個時候又有人問,我是硬體大佬,我改了棧的模式,我可以把Data 1 從中間取出來。這樣行不行?

    也行。你改了棧的儲存取出的方法,那麼你還不能只改取出的方案,儲存的方案是不是也要改,你要同意棧不再是堆疊儲存(意思如果你想加Data 4的話,不再只能加在Data 3 下面,看圖)而是同意Data 4可以填補Data 1的空隙來省空間。

    那麼恭喜你,這個改進後的“棧”其實就是“堆”的雛形了……

  • 中秋節和大豐收的關聯?
  • 現場簽證辦理流程及要點?