Rolf B: Begriff erklären

Beitrag lesen

Hallo Martin,

Die Hervorhebung des "seit" ist gut.

Okay, ich habe "das gibt's noch" und "das braucht man noch" verwechselt. Und Anwendungen für PAE vergessen.

Die 386er haben 4GB Segmente und ein Programm muss im Normalfall seine Segmentregister nicht mehr ändern, wenn es läuft. Es sei denn, man hat einen Prozessor mit mehr als 4GB Adressraum (PAE) und schreibt eine Anwendung für Monsterdatenmengen (DB-Server, CAD, ...).

Es bedeutet aber nicht, dass das Segmentierungsmodell der x86 Prozessoren relevant für das Konzept statischer Variablen ist. Oder dass es sinnvoll ist, auf x86-Prozessoren ein eigenes Segment für statische Variablen vorzuhalten. Meine Erwartung wäre, dass sich statische Variablen und alle Ankerdaten für die Speicherverwaltung der Runtime-Umgebung in .data oder .bss Segment befinden, und dass es genau zwei dieser Segmente gibt.

Eine Runtime könnte natürlich hergehen und User-Daten in ein anderes Segment als die Runtime-Daten legen. Das würde verhindern, dass ein irrlaufender Pointer des User-Bereichs die Daten der Runtime schreddert; es ist nur sehr aufwändig zu realisieren und kostet Laufzeit, bzw. vergrüßert die Programme, weil viele Instruktionen dann Segmentprefixe brauchen. Aber auch dann würde ich noch erwarten, dass statische Variablen und Heap im gleichen .bss Segment liegen. Man verwendet nicht ohne Not zu viele Segmente, weil das Laden eines Segmentregisters ab .286 mehr ist als 32 Bits in ein Register zu schieben und Zeit kostet.

Rolf

--
sumpsi - posui - obstruxi