堆疊
我們的腦袋在做數學運算的時候,會很自然的把算完的結果記憶在腦海裡。電腦在運算的時候也會有暫時記憶運算結果的元件,也就是暫存器
一般 X86 架構的電腦 (EX: 你的PC),或是 ARM 架構的電腦 (EX: 大部分的 Android 手機) 使用固定數量,且各具有特定功能的暫存器來暫時儲存要處理的資料,不過 Wasm 並不是使用暫存器,而是透過 堆疊 來儲存暫時要處理的資料,因此我們首先介紹 Wasm 中的堆疊機制

堆疊是什麼?

堆疊是一種資料結構,顧名思義,就是把東西堆成一疊
堆疊圖
如果你有像這樣堆東西的經驗 (沒有的話自己試一下),當你把新的書放上去的時候,他會在整堆的最上面;而在你要拿中間的某本書之前,在不能從中間抽走的前提下,必須要先把那本書上面的書,都先從最上面一本本拿走,才能拿到你要的書。因此,最後放進去的必須要最先拿出來,所以是一種 後進先出 的資料結構

堆疊在虛擬機中的運作

堆疊最基本的操作有2個
  1. 1.
    push 把東西放進去
  2. 2.
    pop 把東西拿出來
以 3 + 5 這個運算為例,在虛擬機內部就會有以下的步驟:
堆疊運算圖1
堆疊運算圖2
當然,有些步驟是內部操作,你在編寫的時候不一定需要寫出來,不過還是要對這些步驟有點概念

Wasm 堆疊中的資料種類

  1. 1.
    數值 (Value)
    一般的運算資料,在數值型別章節中會有詳細說明
  2. 2.
    標籤 (Label)
    在會影響結構的控制指令 (Structured control instructions) 中,用來區分各個區塊 (block)的標記。在算術、參數和控制指令章節中會有詳細說明
  3. 3.
    堆疊框 (Frame)
    記錄正在執行中的函式的屬性資料,在函式章節中會有詳細說明
Copy link
On this page
堆疊是什麼?
堆疊在虛擬機中的運作
Wasm 堆疊中的資料種類