Comment les fonctions virtuelles sont-elles implémentées dans le code indépendant de la position? P>
Je sais que si ma classe a des fonctions virtuelles, le compilateur génère généralement un circule pour celui-ci contenant des adresses de toutes les fonctions virtuelles et stocke un pointeur sur la tablette dans chaque objet de ma classe. P>
Maintenant, si mon code est indépendant de la position, le compilateur ne peut pas connaître les adresses de fonctions virtuelles (ni aucune fonction, à ce sujet). Alors qu'est-ce que ça fait? P>
J'aimerais savoir quels compilateurs réels font (pas ce qui est théoriquement possible); Je suis surtout intéressé par les plates-formes Linux 32 bits, mais d'autres plates-formes sont légèrement intéressantes aussi. P>
3 Réponses :
Je vous suggère d'écrire des exemples de programmes et de les examiner vous-même avec l'exemple IDA Pro. Téléchargez le version gratuite ou version de démonstration . p>
Fondamentalement, un circuit équitable est partout implémenté comme une table de pointes de fonction. p>
Il y a deux options: p>
La liaison sait, il n'aura pas de difficulté à réparer les compensations tant qu'ils ne croient pas les limites de module. Trouver un qui fait en réalité ce serait le problème plus difficile.