lorsque nous obtenons l'adresse d'une fonction ou d'un objet, est-ce l'adresse virtuelle ou l'adresse physique de cet objet?pointeur de fonction: adresse physique ou virtuelle
10
A
Répondre
11
Vous posez des questions sur les pointeurs en général?
Sur la plupart des systèmes d'exploitation, ce sont des adresses logiques.
Le système d'exploitation est chargé de les traduire en adresses physiques via le mécanisme de mémoire virtuelle et de pagination. Ceci est transparent pour le programme. C'est pourquoi un programme malavisé "frappe les limites" et les GPF.
Sur certains anciens systèmes (par exemple, DOS), ils seraient physiques, vous permettant d'écraser des éléments dans d'autres parties de la mémoire.
7
Dépend du système d'exploitation et du niveau d'exécution de votre code.
Pour un programme utilisateur-terrain normal sur un système d'exploitation moderne, vous obtiendrez l'adresse virtuelle.
Questions connexes
- 1. Adresse physique vers GeoLocation UK
- 2. Adresse physique dans JAVA
- 3. Paramètres de fonction: Copie ou pointeur?
- 4. Comment mapper une adresse de pointeur d'instruction segfault de/var/log/messages à une adresse/fonction dans mon fichier .map?
- 5. Fonction virtuelle ignorée non appelée
- 6. overloading delete, appel de fonction virtuelle pure
- 7. Pointeur de fonction dans C
- 8. fonction javascript pointeur
- 9. NSString (pointeur/non pointeur) Affecter ou conserver
- 10. Comment allez-vous configurer une adresse IP virtuelle?
- 11. Impossible de convertir argument pointeur de fonction
- 12. Pointeur de fonction de membre polymorphe
- 13. iframe source fichier physique ou objet
- 14. C: pointeur de fonction et typedef problème
- 15. Initialisation de pointeur? pour une fonction spécifique
- 16. Où le compilateur Intel C++ stocke-t-il le vptr (pointeur sur la table de fonction virtuelle) dans un objet?
- 17. Comment obtenir l'adresse physique (MAC) d'une adresse IP en utilisant C#?
- 18. Comment pouvez-vous vérifier efficacement le mappage de machine virtuelle pour une adresse?
- 19. Existe-t-il un pointeur de fonction ou un tableau de fonctions dans PowerShell?
- 20. Création d'application virtuelle/répertoire dans le dossier physique sur IIS/ASP.NET
- 21. Pointeur d'assemblage MIPS à un pointeur?
- 22. D'où viennent les plantages "Appel de fonction virtuelle pure"?
- 23. génération de foncteur de type pointeur de fonction membre
- 24. Endianness de la machine virtuelle de Java
- 25. En utilisant des algorithmes STL, vaut-il mieux passer un pointeur de fonction ou un foncteur?
- 26. En C++ si une fonction membre est virtuelle quand la liaison statique peut-elle être utilisée?
- 27. Conception logique versus physique
- 28. JavaScript SetInterval - pointeur de fonction passe au lieu de chaîne
- 29. Un pointeur de fonction membre appelle un constructeur de copie?
- 30. IIS7 ou ASP.NET est de retour une adresse IP client étrange Adresse
mais si je cours le prog suivant: int main() {int (* p)(); p = main; printf ("% p", p);} il donne l'adresse comme 0x80483c4, il pense que c'est l'adresse physique, pourquoi l'adresse virtuelle de la main principale à une telle adresse? Je cours cela sur linux.plz clarifier si je me trompe ?? – mawia
Vous avez tort. C'est une adresse virtuelle. Personne n'a dit que votre fonction main() est chargée à l'adresse virtuelle 0. En fait, par défaut dans les binaires ELF (utilisés dans linux) le segment de code commence à l'adresse virtuelle 0x80482c0, ce qui semble à peu près correct (il y a une configuration cachée) code avant principal()). Gardez à l'esprit que l'espace d'adressage virtuel est souvent non contigu et que les adresses virtuelles ne sont allouées que lorsque vous les utilisez. Juste parce que votre programme est chargé à 0x80482c0 ne signifie pas que tout ce qui existe entre là et 0x0 a déjà été alloué. –
Si vous souhaitez vraiment savoir comment votre programme est organisé en mémoire sous Linux, lisez ceci: http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html –