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>.