地址無關代碼

在計算機領域中,地址無關代碼 (英文: position-independent code,縮寫為PIC),又稱地址無關可執行文件 (英文: position-independent executable,縮寫為PIE) ,是指可在主存儲器中任意位置正確地運行,而不受其絕對地址影響的一種機器碼。PIC廣泛使用於共享庫,使得同一個庫中的代碼能夠被加載到不同進程的地址空間中。PIC還用於缺少內存管理單元的計算機系統中, [1] 使得作業系統能夠在單一的地址空間中將不同的運行程序隔離開來。

地址無關代碼能夠在不做修改的情況下被複製到內存中的任意位置。這一點不同於重定位英語Relocation (computing)代碼,因為重定位代碼需要經過連結器加載器的特殊處理才能確定合適的運行時內存地址。 地址無關代碼需要在原始碼級別遵循一套特定的語義,並且需要編譯器的支持。那些引用了絕對內存地址的指令(比如絕對跳轉指令)必須被替換為PC相對尋址指令。這些間接處理過程可能導致PIC的運行效率下降,但是目前大多數處理器對PIC都有很好的支持,使得這效率上的這一點點下降基本可以忽略。 [2]

參見

引用

  1. ^ John R. Levine. Chapter 8: Loading and overlays. Linkers and Loaders. San Francisco: Morgan-Kauffman. October 1999: 170–171 [2012-08-31]. ISBN 1-55860-496-0. (原始內容存檔於2012-02-16). 
  2. ^ Alexander Gabert. Position Independent Code internals. Hardened Gentoo. January 2004 [2009-12-03]. (原始內容存檔於2009-11-25). direct non-PIC-aware addressing is always cheaper (read: faster) than PIC addressing. 

深入閱讀

外部連結