Position-independent Code (PIC; deutsch: positionsunabhängiger Code) oder position-independent executable (PIE; deutsch: positionsunabhängiges ausführbares Programm) bezeichnet Maschinencode, der ausgeführt werden kann, unabhängig davon, an welcher Adresse er sich im Hauptspeicher befindet. PIC wird üblicherweise für dynamische Bibliotheken verwendet, damit diese für jedes Programm an eine beliebige Speicherposition geladen werden können, wo sie sich nicht mit anderen Objekten des Programms überlappen. Auf älteren Computern ohne MMU wurde PIC verwendet, um die verschiedenen Programme gleichzeitig in den Speicher laden zu können, obwohl solche Systeme nur einen Adressraum haben.
Position-independent Code unterscheidet sich von relozierbarem Code, bei dem vor der Ausführung alle verwendeten Adressen bei Speicherzugriffen durch den Linker oder Lader an die aktuelle Position im Speicher angepasst werden müssen. Um positionsunabhängigen Code zu generieren, muss der Compiler diese Adressierungsart unterstützen. Er muss sämtliche Maschinenbefehle, die sich auf eine absolute Speicheradresse beziehen, durch entsprechende Befehle ersetzen, die relativ zur aktuellen Position arbeiten. Diese zusätzliche Indirektion kann dazu führen, dass positionsunabhängiger Code langsamer ausgeführt wird als das identische Programm in positionsabhängigem Code.
Mit dem Übergang zur virtuellen Adressierung durch die MMU ist es möglich geworden, Programmcode immer an dieselben virtuelle Adresse zu laden, so dass PIC an Bedeutung verloren hat.
Weblinks
- Introduction to PIC (englisch)
- PIC für i386 (englisch)