Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ malloc(3X) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

brk(2)

malloc(3C)

malloc(3X)                                                       malloc(3X)

NAME
     malloc, free, realloc, calloc, mallopt, mallinfo - Hauptspeicher
     zuweisen

SYNTAX
     cc [option ...] datei ... -lmalloc

     #include <stdlib.h>
     #include <malloc.h>

     void *malloc(sizet size);

     void free(void *ptr);

     void *realloc(void *ptr, sizet size);

     void *calloc(sizet nelem, sizet elsize);

     #include <malloc.h>

     int mallopt(int cmd, int value);

     struct mallinfo mallinfo(void);

BESCHREIBUNG
     malloc() und free() bilden ein einfaches, allgemein einsetzbares Paket
     zur Speicherzuweisung.

     malloc() gibt als Ergebnis einen Zeiger auf einen Block zurück, der
     wenigstens size Bytes groß ist. Der Speicherbereich wird nicht initia-
     lisiert.

     Das Argument für free() ist ein Zeiger auf einen Block, der zuvor von
     malloc() belegt wurde. Nach der Ausführung von free() wird dieser
     Speicherplatz für eine neue Zuteilung zur Verfügung gestellt und sein
     Inhalt zerstört [dieses Verhalten läßt sich jedoch ändern; siehe
     mallopt()]. Wenn ptr ein Nullzeiger ist, geschieht nichts.

     Wenn der von malloc() zugewiesene Speicherplatz überschritten wird,
     oder wenn free() eine ungültige Adresse übergeben wird, sind die
     Ergebnisse unvorhersehbar.

     realloc() ändert die Größe des Blocks, auf den ptr zeigt, auf size
     Bytes und gibt einen Zeiger auf den (möglicherweise verlagerten) Block
     zurück. Der Inhalt bleibt bis zur geringeren Größe unverändert.

     calloc() weist Speicherplatz für ein Feld von nelem Elementen der
     Größe elsize zu. Dieser Speicherplatz wird mit Nullen initialisiert.

     mallopt() bietet eine Steuerungsmöglichkeit über den Zuweisungsalgo-
     rithmus. Die verfügbaren Werte für cmd sind in der Include-Datei
     malloc.h definiert und haben folgende Bedeutung:



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

malloc(3X)                                                       malloc(3X)

     MMXFAST  maxfast auf den Wert value setzen. Der Algorithmus weist
               alle Blöcke unterhalb der Größe von maxfast in großen Grup-
               pen zu und teilt sie dann sehr schnell aus. Der Standardwert
               für maxfast ist 24.

     MNLBLKS  numlblks auf den Wert value setzen. Die oben erwähnten "gro-
               ßen Gruppen" enthalten jeweils numlblks Blöcke. numlblks muß
               größer als 0 sein. Der Standardwert für numlblks ist 100.

     MGRAIN   grain auf den Wert value setzen. Die Größen der Blöcke, die
               kleiner als maxfast sind, gelten als auf das nächste Mehrfa-
               che von grain abgerundet, das größer als 0 sein muß. Der
               Standardwert von grain ist die kleinste Anzahl von Bytes,
               die die Ausrichtung jedes Datentyps noch zuläßt. Der Wert
               wird beim Setzen von grain auf ein Vielfaches des Standard-
               werts aufgerundet.

     MKEEP    Daten in einem freigesetzten Block bis zum nächsten
               malloc(), realloc() oder calloc() aufbewahren. Diese Option
               wird lediglich aus Gründen der Kompatibilität mit der frühe-
               ren Version von malloc() beibehalten. Von ihrer Verwendung
               wird abgeraten.

     mallopt() kann wiederholt aufgerufen werden, jedoch nicht mehr, nach-
     dem der erste kleine Block zugeteilt wurde.

     mallinfo() liefert Informationen über den Speicherplatzverbrauch. Es
     gibt die folgende Struktur zurück:

        struct mallinfo  {
             int arena;      /* Gesamtplatz im Bereich */
             int ordblks;    /* Anzahl der normalen Blöcke */
             int smblks;     /* Anzahl der kleinen Blöcke */
             int hblkhd;     /* Speicher für Blockköpfe */
             int hblks;      /* Anzahl von Blöcken */
             int usmblks;    /* Für kleine Blöcke benutzter Speicher */
             int fsmblks;    /* Für kleine Blöcke freier Speicher */
             int uordblks;   /* Für normale Blöcke benutzter Speicher */
             int fordblks;   /* Für normale Blöcke freier Speicher */
             int keepcost;   /* Zus. Speicherbedarf bei Verwendung der
                                keep-Option */
        }

     Diese Struktur ist in der Include-Datei malloc.h definiert.

     Jede der Belegungsroutinen gibt einen Zeiger auf einen geeignet ausge-
     richteten Speicherplatz zurück, der (nach eventueller Zeigertyp-Anpas-
     sung) für die Speicherung jedes beliebigen Objekttyps geeignet ist.






Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

malloc(3X)                                                       malloc(3X)

ERGEBNIS
     malloc(), realloc() und calloc() geben einen Nullzeiger zurück, wenn
     nicht genügend Speicher zur Verfügung steht. Wenn realloc() NULL
     zurückgibt, bleibt der Block, auf den ptr weist, unverändert. Wenn
     mallopt() nach einer Zuordnung aufgerufen wird, oder wenn cmd bzw.
     value ungültig sind, wird ein Wert ungleich null zurückgegeben.
     Andernfalls wird null zurückgegeben.

HINWEISE
     Es ist zu beachten, daß dieses Paket im Gegensatz zu malloc(3C) den
     Inhalt eines Blocks bei Freigabe nicht bewahrt, wenn die Option MKEEP
     von mallopt() nicht benutzt wird.

     Nicht-dokumentierte Merkmale von malloc(3C) sind nicht dupliziert wor-
     den.

     Funktionsprototypen für malloc(), realloc(), calloc() und free() wer-
     den auch in der Include-Datei malloc.h definiert, um die Kompatibili-
     tät mit alten Anwendungen zu erreichen. Neue Anwendungen sollten für
     den Zugriff auf die Prototypen dieser Funktionen stdlib.h verwenden.

     Der von malloc(3X) verwendete Algorithmus ist ein sogenannter "first-
     fit"-Algoithmus. Wenn Sie den "best-fit"-Algorithmus anwenden wollen,
     verwenden Sie malloc(3C).

SIEHE AUCH
     brk(2), malloc(3C).



























Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026