勵志

勵志人生知識庫

什麼是重定位

重定位是在程式執行前或運行時調整程式中使用的地址或符號的過程。

這通常是因為程式在載入到記憶體時,其代碼和數據需要放在記憶體中的某個具體位置,而程式的邏輯地址與所分配到的記憶體物理地址不一致,CPU執行指令時是按照物理地址進行的。為了使程式能正確運行,必須將程式中的邏輯地址轉換成記憶體中的物理地址,這個過程稱為「重定位」或「地址映射」。重定位可以提高記憶體空間的使用率,並確保程式正確執行。

重定位分為靜態重定位和動態重定位兩種類型:

靜態重定位。在程式裝入記憶體的過程中完成,即在程式開始運行前完成所有地址相關的重定位。地址變換通常在裝入時一次完成,以後不再改變。

動態重定位。不是在程式裝入記憶體時完成,而是CPU每次訪問記憶體時由動態地址變換機構自動進行,將相對地址轉換為絕對地址。動態重定位需要軟體和硬體相互配合完成。

此外,為了使地址轉換不會影響到指令的執行速度,需要有硬體地址變換機構的支持,例如在系統中增設一個重定位暫存器,用於存放程式在記憶體中的起始地址。程式在執行時,真正訪問的記憶體地址是相對地址與重定位暫存器中的地址相加而形成的。