Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

mmap(2)

malloc(3X)

malloc(3C)                                                       malloc(3C)

NAME
     malloc, free, realloc, calloc, memalign, valloc - Hauptspeicherplatz
     verwalten

SYNTAX
     #include <stdlib.h>

     void *malloc(sizet size);

     void free(void *ptr);

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

     void *calloc(sizet nelem, sizet elsize);

     void *memalign(sizet alignment, sizet size);

     void *valloc(sizet size);

BESCHREIBUNG
     malloc() und free() stellen ein einfaches Paket zur Speicherplatzver-
     waltung zur Verfügung. malloc() gibt einen Zeiger auf einen Block mit
     einer Größe von wenigstens size Bytes zurück, der für jeden Gebrauch
     geeignet ausgerichtet ist. Der Speicherbereich wird nicht initiali-
     siert.

     Das Argument von free() ist ein Zeiger auf einen Block, der vorher von
     malloc(), calloc(), realloc() oder valloc() zugewiesen wurde; nach der
     Ausführung von free() wird dieser Speicherplatz für eine neue Zuord-
     nung zur Verfügung gestellt. Wenn ptr ein Nullzeiger ist, geschieht
     nichts. Wenn ptr auf freien Speicherplatz zeigt, ist das Verhalten
     undefiniert.

     Wenn der durch malloc() zugewiesene Speicherplatz überschritten oder
     ein unbestimmtes Element an free() übergeben wird, ergeben sich unde-
     finierte Resultate.

     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 kleineren der neuen bzw. alten Größe
     unverändert. Wenn ptr NULL ist, verhält sich realloc() für size wie
     malloc(). Wenn size Null ist und ptr kein Nullzeiger ist, wird das
     Objekt, auf das gezeigt wird, freigegeben.

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

     Reihenfolge und Nähe des durch aufeinanderfolgende Aufrufe von
     calloc() zugewiesenen Speichers sind nicht definiert. Der bei Erfolg
     der Zuweisung zurückgegebene Zeiger wird so ausgerichtet, daß er einem
     Zeiger auf ein Objekt beliebigen Typs zugeordnet werden kann und dann
     für den Zugriff auf ein solches Objekt oder ein Feld solcher Objekte



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

malloc(3C)                                                       malloc(3C)

     im zugewiesenen Speicher verwendet werden kann (bis der Speicher
     explizit freigegeben oder neu zugewiesen wird). Jede derartige Zuwei-
     sung ergibt einen Zeiger auf ein Objekt unabhängig von jedem anderen
     Objekt. Der zurückgegebene Zeiger zeigt auf den Anfang (niedrigste
     Byte-Adresse) des zugewiesenen Speicherplatzes. Wenn der Speicherplatz
     nicht zugewiesen werden kann, wird ein Nullzeiger zurückgegeben. Wenn
     die Größe des angeforderten Speicherplatzes Null ist, ist das Verhal-
     ten von der Implementierung abhängig. Der zurückgegebene Wert ist ent-
     weder ein Nullzeiger oder ein eindeutiger Zeiger.

     memalign() weist einer bestimmten Ausrichtungsgrenze size Bytes zu und
     gibt einen Zeiger auf den zugewiesenen Block zurück. Der Wert der
     zurückgegebenen Adresse ist ein geradzahliges Vielfaches von
     alignment. Der Wert von alignment muß 2^n sein und muß größer oder
     gleich der Länge eines Wortes sein.

     valloc(size) ist gleichbedeutend mit

          memalign(sysconf(SCPAGESIZE),size).

     Jede der Zuweisungsroutinen gibt einen Zeiger auf einen für die Spei-
     cherung jedes beliebigen Objekttyps geeignet ausgerichteten Speicher-
     platz zurück.

     malloc(), realloc(), calloc(), memalign() und valloc() können nicht
     erfolgreich ausgeführt werden, wenn nicht ausreichend Speicherplatz
     vorhanden ist.

ERGEBNIS
     malloc(), realloc(), calloc(), memalign() und valloc() geben einen
     Nullzeiger zurück, wenn nicht genug Speicher zur Verfügung steht. Wenn
     realloc() NULL zurückgibt, wird der Block, auf den ptr zeigt, nicht
     zerstört. Ein Zeiger auf den angeforderten Platz wird zurückgeliefert.

     Wenn bei malloc() size gleich 0 oder bei calloc() entweder nelem oder
     elsize gleich 0 ist, dann wird ein Zeiger mit einem eindeutigen Wert
     zurückgeliefert, der an free() weitergegeben werden kann.

     Wenn bei realloc() size gleich 0 ist, wird der Speicherplatz mit der
     Adresse ptr wieder zur Verfügung gestellt. Diese Adresse muß eine gül-
     tige Adresse sein, die mit malloc() zurückgeliefert wurde.

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

     Anwendungen, die die Routinen memalign und valloc verwenden, dürfen
     nicht die Bibliothek libmalloc [siehe malloc(3X)] dazubinden, da diese
     Routinen auf dem malloc(3C)-Algorithmus aufsetzen.




Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

malloc(3C)                                                       malloc(3C)

SIEHE AUCH
     mmap(2), malloc(3X).




















































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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