符號表中定長陣列和變長陣列的表示方法是什麼?


符號表是一種資料結構,它支援一種有效且高效的方式來儲存原始碼中出現的各種名稱的相關資料。這些名稱在原始碼中用於標識不同的程式元素,例如變數、常量、過程和語句的標籤。

每次在源文字中遇到名稱時,都會搜尋符號表。當找到新名稱或有關現有名稱的新資料時,符號表的內容會修改。因此,符號表應該具有有效的結構,以便建立表中儲存的資料,以及將新條目插入符號表。

在符號表中表示名稱的方法有很多,例如定長陣列表示和變長陣列表示。

定長陣列表示

這是在連續陣列記錄中表示名稱的最簡單方法之一。

符號表的名稱欄位大小固定。

類似地,可以儲存的特定名稱資訊的量的大小也是固定的。

考慮 IBM 370 表示

  • 識別符號長度 = 8 個字元
  • 資訊量 = 16 個字元


假設每個塊只能儲存 4 個字元。因此,我們需要 2 個塊來儲存識別符號,4 個塊來儲存其資訊。

讓我們考慮名稱 **DONALD**。

可以看出,分配給名稱的空間被浪費了,因為只佔用了 1.5 個塊。但是,名稱使用了 2 個塊。讓我們考慮另一個例子。

這裡浪費了一個完整的塊。我們使用下圖總結了這一點。符號表中的陰影框表示記憶體浪費。

優點

  • 易於理解。
  • 易於實現和訪問。


缺點

  • 浪費大量記憶體。
  • 順序訪問
  • 記錄的插入和刪除速度相對較慢。
  • 需要大量的處理和記憶體需求。


變長陣列表示

它不會將名稱直接儲存在符號表中,而是將所有名稱儲存在一個獨立的字元陣列中,並且只保留名稱的起始索引和長度。這將克服定長名稱的缺點。現在它可以具有超過 8 個字元的可變長度,因為在以前的方法中它是固定的。類似地,我們可以將前面的示例表示為

優點

  • 變數名可以是任意長度。
  • 易於訪問。
  • 符號表中沒有浪費記憶體。
  • 符號表現在更有條理。
  • 它可以促進更快的編輯。


缺點

  • 間接維護問題。
  • 需要額外的陣列記錄來儲存變數名。


更新於: 2021-11-08

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.