Wie andere erwähnt haben dies ist sehr plattformspezifisch.Auf dem ARM-System, mit dem ich arbeite (es gibt keinen virtuellen Speicher), gibt es große Teile des Adressraums, denen kein Speicher oder Peripheriegerät zugewiesen ist. Wenn ich eine dieser Adressen lese oder schreibe, bekomme ich einen Busfehler.
Sie können auch einen Busfehler erhalten, wenn tatsächlich ein Hardwareproblem am Bus vorliegt.
Wenn Sie auf einer Plattform mit virtuellem Speicher arbeiten, können Sie absichtlich keinen Busfehler mit Ihrem Programm generieren, es sei denn, es handelt sich um einen Gerätetreiber oder eine andere Kernelmodus-Software. Ein ungültiger Speicherzugriff würde wahrscheinlich vom Speichermanager als Zugriffsverletzung oder Ähnliches eingefangen werden (und es hat niemals eine Chance, den Bus zu treffen).
Welche Plattform und Hardware-Architektur verwenden Sie? –
Es sollte beachtet werden, dass x86 standardmäßig keinen Busfehler hat, stattdessen wird es funktionieren, aber der Speicherzugriff ist nicht so performant wie ein ausgerichteter Lesevorgang. Auf der anderen Seite haben SPARC Bögen einen Busfehler. –
Nein, siehe Michael Burrs Kommentare und meine Antwort. Selbst auf x86 können Sie einen Busfehler erhalten, indem Sie versuchen, auf Speicher zuzugreifen, der nicht existiert (im Gegensatz zu einem Segmentierungsfehler, der von einer Verletzung der Zugriffsrichtlinie herrührt). – ephemient