J’ai lu le lien sur les Options du CCG pour les Conventions de génération de Code, mais ne pouvaient pas comprendre ce qui est « Générer le code indépendant de la position (PIC) ». S’il vous plaît donner un exemple de m’expliquer ce que cela signifie.
Réponses
Trop de publicités?Code Indépendant de la Position signifie que le code machine ne dépend pas être situé à une adresse spécifique pour fonctionner.
E. g. sauts généré relative plutôt qu'absolue.
Pseudo-assemblée:
PIC: Cela ne peut fonctionner que si le code à l'adresse 100 ou 1000
100: COMPARE REG1, REG2
101: JUMP_IF_EQUAL CURRENT+10
...
111: NOP
Non-PIC: Cela ne fonctionne que si le code se trouve à l'adresse 100
100: COMPARE REG1, REG2
101: JUMP_IF_EQUAL 111
...
111: NOP
EDIT: En réponse à un commentaire.
Si votre code est compilé avec-fPIC, il est adapté pour l'inclusion dans une bibliothèque - la bibliothèque doit pouvoir être déplacé de son emplacement privilégié dans la mémoire à une autre adresse, il pourrait y avoir un autre déjà chargé de la bibliothèque à l'adresse de votre bibliothèque préfère.
Je vais essayer d'expliquer ce qui déjà été dit plus simplement.
lorsque partagée lib est chargé, le chargeur (le code sur le système d'exploitation qui charger n'importe quel programme que vous exécutez) modifie certaines adresses dans le code en fonction de l'endroit où l'objet a été chargé à l'. dans l'ex. au-dessus de la "111" dans le Non-PIC code est écrit par le chargeur dans le premier temps, il a été chargé.
pour ne pas objet partagé, vous voulez qu'il soit comme ça, parce que le compilateur peut faire quelques optimisations sur le code.
pour objet partagé, si un autre processus est préférable de "lien" à ce code, il faut le lire pour le même adresses virtuelles ou la "111" à ne pas faire de sens. mais que virtuel-espace peut-être déjà en utilisation dans le deuxième processus.