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