Re: [OT] Warum kein Speicherzugriffsfehler
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.
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.
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.
--
Markus Schulz
Meine letzte Ubuntu-Installation (hinter einem
NAT-Router) hätte sogar ein Wellensittich hinbekommen, wenn ich ein
paar Körner auf die <RETURN>-Taste gelegt hätte ...
[Torsten Fehre im h-forum]
Reply to: