地址不可變

地址不可變

地址不可變是指在編譯時,如果知道程式將駐留在記憶體的什麼位置,那么,編譯程式將產生絕對地址的目標代碼。程式模組被裝入記憶體以後,程式中的邏輯地址與實際記憶體地址完全相同,即地址不可變。地址不可變與程式裝入方式有關,當程式採用絕對裝入方式,程式在運行過程中,地址是不可變的。

簡介

在計算機系統,地址可以分為邏輯地址和物理地址。邏輯地址,在計算機體系結構中是指應用程式角度看到的記憶體單元(memory cell)、存儲單元(storage element)、網路主機(network host)的地址,或由程式產生的與段相關的偏移地址部分。物理地址是指在存儲器里以位元組為單位存儲信息,為正確地存放或取得信息,每一個位元組單元給以一個的存儲器地址。地址不可變在這裡有兩種解釋,第一種解釋可以是指單個程式語句之間的關係是固定的,不管系統採用哪種方式調用程式進入記憶體,但邏輯地址是不變的;第二種解釋是指程式採用動態裝入方式,這是邏輯地址和物理地址相同,即地址也是不可變。

絕對裝入方式

在多道程式環境下,要使程式運行,必須先為之創建進程。而創建進程的第一件事,便是將程式和數據裝入記憶體。如何將一個用戶源程式變為一個可在記憶體中執行的程式,通常都要經過以下幾個步驟:首先是要編譯,由編譯程式(Compiler)將用戶原始碼編譯成若干個目標模組(Object Module);其次是連結,由連結程式(Linker)將編譯後形成的一組目標模組,以及它們所需要的庫函式連結在一起,形成一個完整的裝入模組(Load Module);最後是裝入,由裝入程式(Loader)將裝入模組裝入記憶體 。絕對裝入程式按照裝入模組中的地址,將程式和數據裝入記憶體。由於程式中的邏輯地址與實際地址完全相同,不需要對程式和數據的地址進行修改。程式中所使用的絕對地址,可在編譯或彙編時給出, 也可由程式設計師直接賦予。 但在由程式設計師直接給出絕對地址時, 不僅要求程式設計師熟悉記憶體的使用情況,而且一旦程式或數據被修改後,可能要改變程式中的所有地址。因此,通常是寧可在程式中採用符號地址,然後在編譯或彙編時,再將這些符號地址轉換為絕對地址。絕對地址的產生可以由程式設計師直接賦予。不僅要求程式設計師熟悉記憶體使用情況,而且一旦程式或數據被修改後,可能要改變程式中的所有地址。通常在程式中採用符號地址,在編譯或彙編時,再將符號地址轉換為絕對地址。

編譯

計算機語言之所以能由單一的機器語言發展到現今的數千種高級語言,主要是因為有了編譯技術。編譯技術是計算機科學發展得非常迅速和成熟的一個分支他集中體現了計算機發展的成果與精華 。可以說如果沒有高級語言,計算機的推廣套用是難以實現的;而沒有編譯程式,高級語言就無法使用。編譯(compilation , compile) 是利用編譯程式從源語言編寫的源程式產生目標程式的過程。 或用編譯程式產生目標程式的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程式把人們熟悉的語言換成2進制的。 編譯程式把一個源程式翻譯成目標程式的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼最佳化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程式分析,分析過程中發現有語法錯誤,給出提示信息。詞法分析程式的主要任務:讀源程式,產生單詞符號和濾掉空格。逐個讀入源程式字元並按照構詞規則切分成一系列單詞。單詞是語言中具有獨立意義的最小單位,包括保留字、標識符、運算符、標點符號和常量等。

相關詞條

熱門詞條

聯絡我們