Alle modernen Betriebssysteme implementieren clevererweise eine Nullzeiger-Dereferenzierungsprüfung ohne Ausführungsaufwand mit der virtuellen Speicherverwaltungshardware. Die 0-te 4-kB-Seite (oder in diesem Fall die 0-15-te Seite (insgesamt 64 kB)) wird eingerichtet, so dass jedes Lesen, Schreiben oder Ausführen von Daten an Adresse 0 (oder 0x00000FFF oder 0x0000FFFF) sofort zu einem Zugriff führt Verstoß Ausnahme.
Lassen Sie mich es anders sagen. Das Abfangen von Nullzeiger-Dereferenzierungen auf 0, aber das Zulassen von Datenreferenzen auf (etwa) Adresse 1 wäre unerschwinglich teuer - da Sie die Seitengranularitäts-VM-Hardware nicht verwenden könnten, wäre es stattdessen notwendig, eine Nullzeigervergleichs- und Verzweigungssequenz durchzuführen vor vielen Zeigerdereferenzen. Indem die erste Seite oder die ersten Seiten nicht zugänglich gemacht werden, kann diese Überprüfung "kostenlos" in der VM-Hardware durchgeführt werden. Der Nachteil ist, dass Sie diese erste (n) Seite (n) nicht für etwas anderes verwenden können.
(Theoretisch könnte ein ausreichend optimiert Compiler dann verwendet werden, um festzustellen, welche Zeiger Dereferenzierungen konnte nicht möglicherweise Null-Zeiger dereferenziert sein, aber bis zu dem cleveren Compiler erscheinen, die nicht zugeordneten 0-Seite Trick zu tun hat.)
Also warum ist die Windows (post Win98) Nullzeigerzuweisungs-Partition 64 KB statt der minimal notwendigen 4 KB? Die Antwort von Wyzard ist ein guter Fall für das Einfangen von Null-Pointer-Array-Indexfehlern.
* Späte Aktualisierung: RE: warum 64 KB?- Ich habe jemanden gefragt, der über das Windows Core-Team Bescheid wissen sollte, und sie sagten, dass es sich wahrscheinlich um eine 64-KB-Region handelt, da Windows bestimmte Speicherverwaltungsstrukturen mit einer Zuordnungsgranularität von 64 KB speichert. Warum das? Ich weiß es nicht, aber vielleicht hat Raymond Chen die Antwort: http://blogs.msdn.com/b/oldnewthing/archive/2003/10/03/55239.aspx. Beeindruckend. *
Danke für Ihre Antwort. Es scheint, dass die Ursache in technischen Details liegt, nicht in reiner Logik. – smwikipedia