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

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: