Warum ist die Speicheradresse 0x0 reserviert und wofür? Ich habe Probleme zu verstehen, für was genau, danke für die HilfeWarum ist die Speicheradresse 0x0 reserviert und wofür?
Antwort
Es ist vor allem eine Konvention, und es ist Implementierung spezifisch.
Die Sprache C Standard (C99 oder C11) -und einige andere Programmiersprachen wie Lisp- hat den Begriff des null pointer die dereferenziert werden können (dass undefined behavior wäre, segmentation fault) und unterscheidet sich von jedem anderen Zeiger (um einige gültiger Speicherort). Tony Hoare nannte diesen Begriff bescheidenerweise "my billion dollar mistake", und einige Sprachen (Haskell, Ocaml) haben stattdessen einige tagged unions Typen (z. B. 'a option
in Ocaml).
Die meisten Implementierungen (aber nicht alle), um die Null-Zeiger nach Adressen repräsentieren 0.
In der Praxis auf einem Desktop, Laptop oder Tablet, ein User-Mode-C-Programm läuft in einigen virtual address space, wo die Seite die Adresse enthält, 0 ist nicht zugeordnet. (Auf einigen Linux, man könnte vielleicht mmap(2) mit MAP_FIXED
die Adresse 0, aber das schlechte Geschmack wäre ...)
In einigen eingebetteten microcontrollers (z AVR), Adresse 0 verwendet werden könnten.
Theoretisch (und in der Vergangenheit), Adressen möglicherweise komplexer als eine Nummer ... (in den 1980er Jahren, zum Beispiel auf x86 memory segmentationi286 und iAPX432 Adressierung Rekursiv Architektur, etc ...)
Lesen Sie mehrere Bücher und Webseiten über C-Programmierung, Mikroprozessorarchitekturen & instruction sets, operating system Prinzipien, virtual memory, MMU s.
Bei ausgelagerten Speichersystemen ist es üblich, die erste (nullte) Seite standardmäßig nicht zuzuordnen. Dies ist eine Konvention, die normalerweise vom Linker erzwungen wird. Wenn der Programmlader die ausführbare Datei liest, erhält er nie eine Anweisung zum Zuordnen der ersten logischen Seite.
Der Grund dafür ist, Nullzeigerfehler zu erkennen.
int *whatever = 0 ;
. . . .
*whatever = 10 ;
wird eine Zugriffsverletzung verursachen.
Das heißt, es ist normalerweise möglich, dass ein Prozess die erste (nullte) Seite nach dem Start abbildet und in einigen Fällen können Sie Linker-Optionen angeben, die es erlauben, Programmabschnitte dort zu basieren.
- 1. Warum ist UILabel 0x0?
- 2. Warum ist $ {0x0} korrekt?
- 3. Wofür ist die Ausbeute?
- 4. Wofür ist die Spalte _COUNT?
- 5. Wofür ist die Datei .sconsign.dblite?
- 6. Warum hat diese Speicheradresse einen zufälligen Wert?
- 7. Python3 Mehrfachbelegung und Speicheradresse
- 8. Wofür sind die Dateiberechtigungszeichen @ und +?
- 9. Warum ist der Rückgabewert in Java Speicheradresse statt tatsächlichen Wert?
- 10. wofür ist ~/.npm dir?
- 11. Ist primitive eine Speicheradresse zugewiesen?
- 12. Die Notwendigkeit für die Laufzeit-Speicheradresse verbindlich
- 13. Warum ist das ‚@‘ Symbol in Javascript reserviert und was ist ihr Zweck?
- 14. Wofür ist die Position relativ nützlich?
- 15. 320 und Up Framework - Wofür ist die Größe 600?
- 16. Wofür ist OverrideAuthenticationAttribute?
- 17. Was ist ein Code-Kata und wofür ist es gut?
- 18. Wofür ist DNU Wrap?
- 19. C# Wofür ist das "+ ="?
- 20. Wofür ist Clojure nützlich?
- 21. panic: Laufzeitfehler: ungültige Speicheradresse oder Nullzeiger Dereferenz
- 22. Warum beginnt eine Speicheradresse mit 0x?
- 23. Wofür ist rel = profile?
- 24. Wofür ist EditorReuseAttribute wirklich?
- 25. Wofür ist User Token nützlich?
- 26. Wofür ist "float_t"?
- 27. Ist mehr Platz für Variantensätze reserviert?
- 28. Wofür stehen "nib" und "xib"?
- 29. Die ‚<‘ Operator ist für zukünftige Anwendungen reserviert
- 30. Wofür steht "apachectl"? Warum ist es nicht nur "Apache"?