Provided by: manpages-de-dev_1.4-1_all bug

BEZEICHNUNG

       malloc, free, calloc, realloc - dynamischen Speicher belegen und freigeben

ÜBERSICHT

       #include <stdlib.h>

       void *malloc(size_t size);
       void free(void *ptr);
       void *calloc(size_t nmemb, size_t size);
       void *realloc(void *ptr, size_t size);

BESCHREIBUNG

       malloc()  belegt  size  Byte  und gibt einen Zeiger auf den belegten Speicherbereich zurück. Der Speicher
       wird nicht initialisiert.  Falls  size  0  ist,  wird  malloc()  entweder  NULL  zurückgeben  oder  einen
       eindeutigen Zeigerwert, der später erfolgreich an free() übergeben werden kann.

       free()  gibt  den  Speicher  frei,  auf  den  ptr  zeigt, welcher von einem früheren Aufruf von malloc(),
       calloc() oder realloc() belegt worden sein muss.  Andernfalls  oder  wenn  free(ptr)  bereits  aufgerufen
       wurde, ist das Verhalten nicht definiert. Wenn ptr NULL ist, wird keine Operation ausgeführt.

       calloc()  belegt  Speicher  für ein Array von nmemb Elementen von jeweils size Byte und gibt einen Zeiger
       auf den belegten Speicherbereich zurück. Der Speicher wird auf Null gesetzt. Falls nmemb oder size 0 ist,
       gibt calloc() entweder NULL zurück oder einen eindeutigen Zeigerwert, der später  erfolgreich  an  free()
       übergeben werden kann.

       realloc()  ändert  die  Größe  des  Speicherblocks,  auf  den ptr zeigt, auf size Byte. Der Inhalt bleibt
       unverändert im Bereich vom Anfang des Speicherbereichs bis zum Minimum von alter und neuer  Größe.  Falls
       die  neue  Größe  die  alte  überschreitet,  wird der zusätzliche Speicher nicht initialisiert. Falls ptr
       gleich NULL ist, ist der Aufruf äquivalent zu malloc(size); falls die Größe gleich Null ist und  ptr  ist
       von  NULL verschieden, ist der Aufruf äquivalent zu free(ptr). Wenn ptr nicht NULL ist, muss er von einem
       früheren Aufruf von malloc(), calloc() oder realloc() zurückgegeben worden sein. Falls der  Bereich,  auf
       den verwiesen wurde, verschoben wurde, wird free(ptr) aufgerufen.

RÜCKGABEWERT

       The  malloc()   and calloc()  functions return a pointer to the allocated memory that is suitably aligned
       for any kind of variable. On error, these  functions  return  NULL.  NULL  may  also  be  returned  by  a
       successful call to malloc()  with a size of zero, or by a successful call to calloc()  with nmemb or size
       equal to zero.

       Die Funktion free() gibt keinen Wert zurück.

       The  realloc()   function  returns a pointer to the newly allocated memory, which is suitably aligned for
       any kind of variable and may be different from ptr, or NULL if the request fails. If size was equal to 0,
       either NULL or a pointer suitable to be passed to free()  is returned. If realloc()  fails  the  original
       block is left untouched; it is not freed or moved.

KONFORM ZU

       C89, C99.

ANMERKUNGEN

       Standardmäßig  verfolgt Linux eine optimistische Strategie bei der Speicherzuweisung. Das bedeutet nicht,
       dass der Speicher garantiert verfügbar ist, wenn malloc() einen  von  NULL  verschiedenen  Zeiger  zurück
       gibt.  Falls  es  sich herausstellt, dass das System über keinen freien Speicher verfügt, werden ein oder
       mehrere Prozesse vom  »OOM  Killer«  beendet.  Für  weitere  Informationen  siehe  die  Beschreibung  von
       /proc/sys/vm/overcommit_memory  und  /proc/sys/vm/oom_adj  in  proc(5)  sowie die Linux-Kernel-Quelldatei
       Documentation/vm/overcommit-accounting.

       Normalerweise stellt malloc() Speicher auf dem Heap bereit und passt je nach Bedarf die Größe  des  Heaps
       mittels  sbrk(2) an. Bei der Zuweisung von Speicherblöcken größer als MMAP_THRESHOLD Bytes reserviert die
       Glibc-Implementierung von malloc() den Speicher als eine private anonyme Zuordnung mithilfe von  mmap(2).
       MMAP_THRESHOLD  ist  standardmäßig  128 kB, kann aber mittels mallopt(3) angepasst werden. Reservierungen
       unter Verwendung von mmap(2) sind von der Ressourcenbeschränkung RLIMIT_DATA (siehe  getrlimit(2))  nicht
       betroffen.

       Um  Verfälschungen  in  Multithread-Anwendungen  zu  vermeiden,  werden  intern  Mutexe  zum  Schutz  der
       Speicherverwaltungs-Datenstrukturen eingesetzt, die  von  diesen  Funktionen  genutzt  werden.  In  einer
       Multithread-Anwendung,  in  denen  Threads  gleichzeitig  Speicher  zuweisen  und  freigeben,  könnte  es
       Zugangskonflikte für diese Mutexe geben. Um die Speicherzuweisung in  Multithread-Anwendungen  skalierbar
       zu  bewältigen,  erzeugt  Glibc zusätzliche memory allocation arenas, wenn Mutex-Konflikte entdeckt wird.
       Jede Arena ist eine große Speicherregion, die intern vom System (mit brk(2) oder mmap(2)) zugeordnet  und
       mit eigenen Mutexen verwaltet wird.

       Der  UNIX-98-Standard  fordert  von  malloc(),  calloc()  und realloc() im Fehlerfall errno auf ENOMEM zu
       setzen. Glibc geht davon aus, dass das getan wurde (und die Glibc-Versionen dieser Routinen tun es). Wenn
       Sie eine  private  Implementierung  von  malloc  verwenden,  die  errno  nicht  setzt,  können  bestimmte
       Bibliotheksroutinen fehlschlagen, ohne einen Grund in errno fehlschlagen.

       Abstürze  in  malloc(),  calloc(),  realloc()  oder  free()  haben  nahezu  immer  einen  Bezug  zu einem
       beschädigten Heap, wie z.B. eine Nutzung von mehr als dem zugeordneten  Bereich  (overflowing)  oder  die
       doppelte Freigabe eines Zeigers.

       Neuere    Versionen    der   Linux-Libc   (neuer   als   5.4.23)   und   Glibc   (2.x)   enthalten   eine
       malloc()-Implementierung,  die  über  Umgebungsvariablen  eingestellt  werden  kann.  Für  Details  siehe
       mallopt(3).

SIEHE AUCH

       brk(2), mmap(2), alloca(3), malloc_get_state(3), malloc_info(3), malloc_trim(3), malloc_usable_size(3),
       mallopt(3), mcheck(3), mtrace(3), posix_memalign(3)

KOLOPHON

       This page is part of release 3.54 of the Linux man-pages project. A description of the project, and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>
       erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
       bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
       <debian-l10n-german@lists.debian.org>.

GNU                                                2012-05-10                                          MALLOC(3)