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