Hier sind die Links, um durch
alle Seiten zu navigieren:
Kurzbeschreibung: | Eine Maske für 'mode' von Mxalloc liefern
|
C: | int16 Mxmask( void );
|
Definition: | in TOS.H
|
Die Funktion Mxmask liefert eine Maske für Mxalloc zurück. Damit kann geprüft werden, ob Mxalloc vorhanden ist und ob es die Speicherschutz-Flags unterstützt.
Die folgenden Werte werden geliefert:
0 | Mxalloc ist nicht vorhanden, es muß Malloc benutzt werden.
|
3 | Mxalloc ist vorhanden, allerdings werden die Speicherschutz-Flags
niht unterstützt.
|
-1 | Mxalloc ist vorhanden, die Speicherschutz-Flags werden
unterstützt.
|
Beispiel: Die folgende Funktion soll die Verwendung von Mxmask verdeutlichen:
void *myMxalloc( int32 size, int16 mode ) { int16 mxmask = Mxmask(); if( mxmask!=0 ) memory = Mxalloc(size, mode & mxmask); else memory = Malloc(size); }
Hintergrund: Die ersten Implementationen von Mxalloc im GEMDOS stürzten bei Verwendung der Speicherschutz-Flags gnadenlos ab und rissen die Anwendung, manchmal sogar das gesamte System mit!
Anmerkung: Im MausNet wurden in der Gruppe Maus.Computer.Atari.Programmieren verschiedene Implementationsvarianten von Mxmask diskutiert. Schließlich blieb die hier realisierte Variante übrig. Sie beruht u.a. auf dem Vorhandensein der Funktion Sysconf. Falls die Funktion Sysconf vorhanden ist (momentan nur unter MiNT), so können die Speicherschutz-Flags gefahrlos verwendet werden. Andreas Kromke hat zugesagt, die Funktion Sysconf spätestens dann in MagiC zu implementieren, wenn MagiC Speicherschutz unterstützen sollte. Damit ist die hier implementierte Erkennung auch in Zukunft abgesichert.