Provided by: manpages-nl-dev_4.15.0-9_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);

   Feature Test Macro´s eisen 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(), calloc(), realloc()                      │ Thread veiligheid │ MT-Safe │
       └───────────────────────────────────────────────────────────┴───────────────────┴─────────┘

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.

   Niet overdraagbaar gedrag
       Het gedrag van realloc() wanneer grootte gelijk is aan nul en wzr niet NULL is,  is  glibc
       afhankelijk;  andere  implementaties kunnen NULL teruggeven en errno zetten. Overdraagbare
       POSIX programma´s moeten het vermijden. Zie realloc(3p).

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.13 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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.