Provided by: manpages-nl-dev_4.13-4_all bug

NAAM

       malloc, free, calloc, realloc - reserveren en vrijmaken van dynamisch geheugen

SAMENVATTING

       #include <stdlib.h>

       void *malloc(size_t grootte);
       void free(void *wzr);
       void *calloc(size_t nmemb, size_t grootte);
       void *realloc(void *wzr, size_t grootte);
       void *reallocarray(void *wzr, size_t nmemb, size_t grootte);

   Test Macro´s in glibc (zie feature_test_macros(7)):

       reallocarray(): _GNU_SOURCE
           Sinds glibc 2.29:
               _DEFAULT_SOURCE
           Glibc 2.28 en eerder:
               _GNU_SOURCE

BESCHRIJVING

       De malloc() functie reserveert grootte bytes geheugen en geeft een wijzer naar het gereserveerde geheugen
       terug.  Het  geheugen  wordt  niet geinitialiseerd. Als grootte gelijk is aan 0, dan retourneert malloc()
       ofwel een NULL ofwel een unieke wijzer waarde sdie later kan worden mee gegeven aan free().

       De free() functie maakt de geheugen-ruimte waar wzr naar wijst vrij, geheugen dat gereserveerd moet  zijn
       door  een  eerdere  aanroep naar malloc(), calloc() of realloc(). Anders, of als free(wzr) al eerder werd
       aangeroepen, ontstaat onbepaald gedrag. Als wzr NULL is wordt niets gedaan.

       De calloc() reserveert geheugen voor een tabel van nmemb elementen ter van grootte bytes,  en  geeft  een
       wijzer  naar  het  toegewezen geheugen terug. Het geheugen wordt ge`nul'd. Als nmemb of grootte gelijk is
       aan 0, dan geeft calloc() ofwel een NULL terug ofwel een unieke wijzer waarde  die  later  succesvol  mee
       gegeven kan worden aan free(). Als de vermenigvuldiging van nmemb en grootte zou resulteren in een geheel
       getal  overloop,  dan  geeft  calloc()  een  foutmelding.  In  tegenstelling tot dit zou een geheel getal
       overloop niet opgemerkt worden in de volgende aanroep van  malloc(),  met  als  resultaat  dat  een  blok
       geheugen met een niet correct grootte gereserveerd zou worden:

           malloc(nmemb * grootte);

       De  realloc() functie verandert de grootte van het geheugen-blok waar wzr naar wijst in grootte bytes. De
       inhoud zal onveranderd blijven in het gebied dat begint bij het geheugen gebied tot aan het  minimum  van
       de oude en nieuwe grootte. Als de nieuwe grootte groter is dan de oude dan wordt het toegevoegde geheugen
       niet  geïnitialiseerd.  Als wzr NULL is, dan is de aanroep gelijk aan malloc(grootte); als grootte gelijk
       aan nul is, dan is de aanroep gelijk aan free(wzr). Tenzij wzr NULL is, moet het teruggegeven  zijn  door
       een  eerdere  aanroep  naar  malloc(),  calloc()  of realloc(). Als het gebied waarnaar gewezen werd werd
       verplaatst dan wordt een free(wzr) uitgevoerd.

       De reallocarray() functie verandert de grootte van het blok aangewezen door ptr om groot genoeg  te  zijn
       voor  een  tabel  van  nmemb  elementen,  elk met een grootte van grootte bytes. Dit is equivalent aan de
       aanroep:

               realloc(ptr, nmemb * grootte);

       Echter, anders dan de realloc()  aanroep, reallocarray() faalt veilig in het geval dat  de  multiplicatie
       zou  overlopen. Als zo een overloop optreed, reallocarray() retourneert een NULL, zet errno op ENOMEM, en
       laat het originele geheugen blok onveranderd.

EIND WAARDE

       De calloc() en malloc() functies retourneren een wijzer naar het gereserveerde geheugen, dat geschikt  is
       opgelijnd  voor  elk  ingebouwd  type.  Bij  een  fout,  retourneren  deze  functies  NULL.  NULL kan ook
       teruggegeven worden succesvolle aanroep van malloc() met een grootte van  nul,  of  bij  een  succesvolle
       aanroep van calloc() met nmemb of grootte gelijk aan nul.

       De free() functie geeft geen waarde terug.

       De  realloc()  functie  retourneert  een  wijzer  naar  het nieuw gereserveerde geheugen, dat geschikt is
       opgelijnd voor elk ingebouwd type of NULL  als  de  aanroep  faalde.   De  teruggegeven  wijzer  kan  van
       hetzelfde  type  zijn als wzr als de reservering niet was verplaatst (b.v. er was ruimte om de ruimte uit
       te breiden), of verschillend van wzr als de reservering was verplaatst naar een nieuw adres. Als  grootte
       gelijk was aan 0, wordt ofwel NULL of een wijzer bruikbaar om door te geven aan free() terug gegeven. Als
       realloc() faalt, dan wordt het originele blok niet aangeraakt; het wordt niet vrijgegeven of verplaatst.

       Bij  succes  geeft  de  reallocarray() functie een wijzer naar het nieuw gereserveerde geheugen terug. Na
       falen, retourneert het NULL en het originele blok geheugen wordt niet verandert.

FOUTEN

       calloc(), malloc(), realloc(), en  reallocarray()  kunnen falen met de volgende fout:

       ENOMEM Geen geheugen  meer.   Mogelijk,  het  programma  bereikte  de  RLIMIT_AS  of  RLIMIT_DATA  limiet
              beschreven in getrlimit(2).

VERSIES

       reallocarray()  verscheen voor het eerst in glibc in versie 2.26.

ATTRIBUTEN

       Voor een uitleg van de termen in deze sectie, zie attributes(7).
       ┌──────────────────────┬───────────────────┬─────────┐
       │ InterfaceAttribuutWaarde  │
       ├──────────────────────┼───────────────────┼─────────┤
       │ malloc(), free(),    │ Thread veiligheid │ MT-Safe │
       │ calloc(), realloc()  │                   │         │
       └──────────────────────┴───────────────────┴─────────┘

VOLDOET AAN

       malloc(), free(), calloc(), realloc(): POSIX.1-2001, POSIX.1-2008, C89, C99.

       reallocarray()   is  a niet-standard uitbreiding die voor het eerst verscheen in  OpenBSD 5.6 and FreeBSD
       11.0.

OPMERKINGEN

       Standaard volgt, Linux een  optimistische  geheugen  toewijzing  strategie.   Dit  betekent  dat  wanneer
       malloc()   een  niet-NULL  terug  geeft  returns  dat  er  nog  geen  garantie  is  dat  het geheugen ook
       daadwerkelijk beschikbaar is.  In het geval dat blijkt dat het systeem geen vrij geheugen meer heeft, dan
       worden een of  meer  processen  vernietigd  door  de  OOM  vernietiger.  Voor  meer  informatie,  zie  de
       beschrijving  van  /proc/sys/vm/overcommit_memory en /proc/sys/vm/oom_adj in proc(5), en het Linux kernel
       bron code bestand and the Linux Documentation/vm/overcommit-accounting.rst.

       Normaliter kent  malloc() geheugen toe van de heap en past de grootte van  de  heap  aan  zoals  vereist,
       gebruikmakende  van  sbrk(2). Bij het toekennen van blokken geheugen groter dan MMAP_THRESHOLD bytes kent
       de glibc malloc() implementatie het geheugen toe als een private anoniem tabel met  behulp  van  mmap(2).
       MMAP_THRESHOLD  is  standaard  128   kB,  maar  is  instelbaar  m.b.v.  mallopt(3). Voor Linux 4.7 werden
       toekenningen gedaan met mmap(2) niet beïnvloed door de RLIMIT_DATA bron limiet; vanaf  Linux  4.7,  wordt
       deze limiet afgedwongen voor toekenningen gedaan met mmap(2).

       Om   corruptie   in   multi-threaded  applicaties  te  vermijden  worden  semaforen  intern  gebruikt  om
       geheugen-management data structuren die deze functies gebruiken  te  beschermen.  In  een  multi-threaded
       application waarin threads gelijktijdig geheugen toekennen en vrijgeven kan er een botsing zijn voor deze
       semaforen.  Om  schaalbaar  geheugen  toekenning  te  kunnen  afhandelen in een multi-threaded applicatie
       creëert glibc additionele memory allocation areas  zodra  semafoor  botsingen  worden  gedetecteerd.  Elk
       gebied  is  een  grote  geheugen  regio  die  intern  toegekend  wordt door het systeem (m.b.v. brk(2) of
       mmap(2)), en bewaakt met zijn eigen semaforen.

       SUSv2 vereist malloc(2), calloc(), en realloc()  om errno op ENOMEM te zetten bij het falen. Glibc  neemt
       aan  dat  dit  wordt  gedaan   (en  de  glibc versies van deze functies doen dit); als u een privé malloc
       implementation gebruikt die errno niet zet, dan kunnen bibliotheek  routines   falen  zonder  opgaaf  van
       reden in errno.

       Crashes  in  malloc(), calloc(), realloc(), of free()  zijn bijna altijd gerelateerd aan corruptie van de
       heap, zoals overlopen van een toegekend gebied or twee keer vrij geven van dezelfde wijzer.

       De malloc()  implementatie is aanpasbaar via omgeving variabelen; zie mallopt(3)  voor details.

ZIE OOK

       valgrind(1), 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)

       Voor details over de GNU C library implementatie, zie https://sourceware.org/glibc/wiki/MallocInternals.

COLOFON

       Deze pagina is onderdeel van release 5.10 van het Linux man-pages-project. Een beschrijving van het
       project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op
       https://www.kernel.org/doc/man-pages/ te vinden.

VERTALING

       De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario
       Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

       Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de
       Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

       Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-
       dutch@lists.debian.org.

GNU                                                9 juni 2020                                         MALLOC(3)