Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

Der System Memory Manager

Der System Memory Manager enthält alle nötigen Funktionen für die interne Speicherverwaltung. Grundsätzlich wird der Code aus dem Kerninghan&Ritchie benutzt, aber es gibt kleine Unterschiede. "Morecore" wird nie aufgerufen. Die Funktionen nutzen einen großen Speicherblock, der während des Bootens alloziert wird. Sie werden benutzt, um Datagramme sowie Empfangs- und Sende-Queues zu speichern, und um interne Strukturen aufzunehmen, die vom Kernel angelegt und auch wieder freigegeben werden. Daher ist interner Speicher eine wertvolle Ressource und sollte nicht verschwendet werden (aber als ATARI-Programmierer wissen Sie das ja :-)). Sofern möglich, sollten STinG-Clients immer die normalen TOS- Funktionen Malloc und Mfree nutzen.

Die Aufrufe sind im einzelnen:


Die Funktion KRmalloc
    void *  cdecl  KRmalloc (int32 length);
Funktion : Alloziert Systemspeicher.

Diese Funktion wird benutzt, um einen Speicherblock zu allozieren, der nur von der aufrufenden Funktion genutzt werden sollte. Die benötigte Länge des Blocks wird als Parameter übergeben. Am Ende muß der Block wieder zurückgegeben werden, dies geschieht nicht automatisch, wenn die aufrufende Funktion beendet wird! Um dies zu erreichen, benutzen Sie KRfree mit der Adresse, die von KRmalloc zurückgeliefert wird.

KRmalloc gibt die Adresse des allozierten Blocks zurück, oder NULL bei knappem Speicher.


Die Funktion KRfree

    void  cdecl  KRfree (void *block); 
Diese Funktion gibt einen Block des Systemspeichers wieder frei.

Diese Funktion wird benutzt, um Speicherblöcke freizugeben, die zuvor von KRmalloc oder KRrealloc alloziert wurden. Ein NULL-Pointer hat keinen Systemabsturz zur Folge.


Die Funktion KRgetfree
    int32  cdecl  KRgetfree (int16 which); 
Liefert die Größe des freien Systemspeichers zurück.

Diese Funktion wird benutzt, um zu erfahren, wieviel Systemspeicher noch frei ist. Ist der Parameter 'which' TRUE, so wird die Größe des größten Blocks zurückgegeben, bei FALSE der gesamte freie Speicher.


Die Funktion KRrealloc
    void *  cdecl  KRrealloc (void *block, int32 new_length); 
Hiermit wird die Größe eines bereits allozierten Speicherblocks verändert.

Die Funktion verändert die Größe eines Blocks, der zuvor mit KRmalloc angefordert worden ist. Wenn möglich, wird versucht, den Block nicht zu verschieben, auch wenn new_length größer ist als der vorherige Block. Ist dies nicht möglich, so enthält der Parameter 'block' die neue Adresse, der Inhalt wird in den neuen Block kopiert. Ist 'new_length' gleich Null, so verhält sich die Funktion wie KRfree, der Block wird freigegeben.
Enthält 'block' NULL, so verhält sich der Aufruf wie KRmalloc, doch der Inhalt des neuen Blocks wird mit Nullen überschrieben.

Es wird die Adresse des neuen Blocks zurückgegeben.


Zum Anfang der Seite

Zurück zur Startseite


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum