Manned.org

calloc

MALLOC(3)                Linux Programmeurs Handleiding                MALLOC(3)

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);

       The realloc()  function changes the size of the memory block pointed to
       by ptr to size bytes.  The contents will be unchanged in the range from
       the start of the region up to the minimum of the old and new sizes.  If
       the new size is larger than the old size, the added memory will not be
       initialized.  If ptr is NULL, then the call is equivalent to
       malloc(size), for all values of size; if size is equal to zero, and ptr
       is not NULL, then the call is equivalent to free(ptr) (this behavior is
       nonportable; see NOTES).  Unless ptr is NULL, it must have been returned
       by an earlier call to malloc(), calloc(), or realloc().  If the area
       pointed to was moved, a free(ptr) is done.

       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).
       ┌─────────────────────────────────────────┬───────────────────┬─────────┐
       │ Interface                               Attribuut         Waarde  │
       ├─────────────────────────────────────────┼───────────────────┼─────────┤
       │ 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.

   Nonportable behavior
       The behavior of realloc()  when size is equal to zero, and ptr is not
       NULL, is glibc specific; other implementations may return NULL, and set
       errno.  Portable POSIX programs should avoid it.  See 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 ⟨⟩.

GNU                               22 maart 2021                        MALLOC(3)