[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Warum kein Speicherzugriffsfehler



Markus Schulz wrote:
Am Donnerstag, 14. Februar 2008 schrieb Reinhold Plew:
[...]
> Wenn du die Schleife länger laufen lässt "verlässt" du irgendwann
> den allozierten Heap Bereich deines Programmes, dann landest du in
> einer nicht allozierten Page und generierst damit ein Page Fault.

Und genau da liegt die Ursache für den Effekt, den Martin sieht.
Wenn das Programm mit der Schleife korrekt laufen würde, kommt es zu
einem Page Fault, wenn der Speicher nicht mehr ausreicht.

In der zweiten Version, ohne Schleife, reicht der verfügbare Speicher
anscheinend aus, um die Daten aufzunehmen. Man muss nicht immer
explizit Speicher allozieren, um mit Variablen arbeiten zu können
(ich weiss, schlechter Programmierstil und sollte verboten werden).

Naja, wenn du in der "Ohne-Schleife" Version Zugriffe von 0..140000 hinschreiben würdest, würde er auch segfaulten wie die Schleife von 0..140000. Der Heap dieses Testprogramms ist ~128kb groß, sobald also der Zugriff diesen Bereich verlässt gibt's 'nen SegFault.

Naja, hatte ich ja oben geschrieben, nur etwas salopp ausgedrückt.

Ein Page-Fault kommt genau dann zustande wenn die berechnete Adresse auf die zugegriffen wird nicht dem Prozess gehört, ob der Speicher via malloc/new/.. alloziert wurde oder nicht ist dabei egal.

ACK

Natürlich ist es unsauber und absolut gefährlich auf Speicher den man nicht alloziert hat zuzugreifen und darauf zu vertrauen das er noch/schon verfügbar ist.

ACK

Gruss
Reinhold



Reply to: