Könnte sein, dass ich etwas Offensichtliches übersehe, aber wo sind Zeiger-Metadaten gespeichert? Zum Beispiel, wenn ich einen 32-Bit-Int-Zeiger ptr
habe und ich ptr++
ausführe, weiß es 4 Bytes im Speicher zu erweitern. Wenn ich jedoch einen 64-Bit-Integer-Zeiger habe, weiß er, dass er 8 Bytes vorrücken soll. Wer also verfolgt welche Art von Zeiger ptr
ist und wo ist er gespeichert? Der Einfachheit halber können Sie dies auf C++ beschränken.Wo werden Zeigermetadaten gespeichert?
8
A
Antwort
18
Es wird nirgendwo per se gespeichert. Der Compiler betrachtet den Typ von ptr und wandelt die Operation ++ in ein Inkrement der korrekten Anzahl von Bytes um.
+0
Danke. Ich habe nicht einmal daran gedacht, dass es zur Kompilierzeit berechnet werden könnte. – bmalicoat
7
In der symbol table während der Compiler läuft. Nirgendwohin, während Ihr Programm ausgeführt wird, oder vielmehr ist es im unteren Code vom Compiler implizit enthalten.
2
Es wird nicht irgendwo gespeichert, es wird zur Kompilierzeit bestimmt. Nehmen Sie diesen Code als Beispiel:
int *abc = NULL;
cout << abc + 1; /* Prints sizeof(int) */
cout << (void *)((char *)abc + 1); /* Prints 1. Casting it back to void * is necessary,
otherwise it will try to dereference it and print as a string. */
Verwandte Themen
- 1. Wo werden Makros gespeichert?
- 2. Wo die Einrichtungseinstellungen gespeichert werden
- 3. Wo werden ServiceWorker Daten gespeichert?
- 4. Wo/wie werden Verzweigungsvorhersagedaten gespeichert?
- 5. Wo werden String-Daten gespeichert?
- 6. Wo werden const Daten gespeichert?
- 7. Wo werden SSIS-Pakete gespeichert?
- 8. Wo werden heruntergeladene Sounddateien gespeichert?
- 9. Wo können Metadaten gespeichert werden?
- 10. Wo werden InAPP-Käufe gespeichert?
- 11. Wo werden Bilder in Programmen gespeichert?
- 12. Wo werden lokale Variablen zur Kompilierzeit gespeichert?
- 13. Wo werden Docker-Images von boot2docker gespeichert?
- 14. Wo können mobile Daten gespeichert werden (Großprojekt)?
- 15. Wo \ Wie verteilte Konfigurationsdaten gespeichert werden
- 16. Wo können Delphi DCU-Dateien gespeichert werden?
- 17. Wo werden Screenshots von phantom.js gespeichert?
- 18. Dokumentenverwaltungssystem - Wo können Dateien gespeichert werden?
- 19. Flask-Sitzungen, wo werden die Cookies gespeichert?
- 20. WPF, wo NLog-Protokolle gespeichert werden
- 21. PHP: Wo sollten Validierungsfunktionen gespeichert werden?
- 22. Servlets: Wo können hochgeladene Dateien gespeichert werden?
- 23. Wo können VAO-Attribute gespeichert werden?
- 24. Wo werden meine Windows-Eingabeaufforderungseigenschaften gespeichert?
- 25. Wo werden die .pickle-Dateien gespeichert?
- 26. Wo werden Android-Logcat-Dateien gespeichert?
- 27. Wo werden Dashboard Widget-Einstellungen tatsächlich gespeichert?
- 28. Wo werden Visual Studio-Haltepunkte gespeichert?
- 29. Android: Wo werden heruntergeladene Dateien gespeichert?
- 30. Wo werden die Daten für Properties.Settings.Default gespeichert?
Kurze Antwort: Magie. Lange Antwort, es muss nicht irgendwo gespeichert werden, da der Compiler die angeforderte Zeigerarithmetik zur Kompilierzeit ausführen kann. –
Alok, du solltest das als Antwort posten. Es ist exzellent. –
Aus den FAQ * 'Keine Frage ist zu trivial oder zu, Neuling'. '*, Daher ist das [n00b] -Tag unnötig und auf jeden Fall falsch geschrieben. – dmckee