538 votes

Option - cple GCC

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.

657voto

Erik Points 38942

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.

75voto

Roee Gavirel Points 4550

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.

55voto

Jonathan Leffler Points 299946

Le code qui est intégré dans les librairies partagées doit normalement être code indépendant du poste, afin que la bibliothèque partagée peut facilement être chargée à (plus ou moins) de n’importe quelle adresse en mémoire. Le `` option assure que GCC produit un tel code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X