.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) .\" and Copyright i2007, 2012, 2018, Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified Sat Jul 24 19:00:59 1993 by Rik Faith (faith@cs.unc.edu) .\" Clarification concerning realloc, iwj10@cus.cam.ac.uk (Ian Jackson), 950701 .\" Documented MALLOC_CHECK_, Wolfram Gloger (wmglo@dent.med.uni-muenchen.de) .\" 2007-09-15 mtk: added notes on malloc()'s use of sbrk() and mmap(). .\" .\" FIXME . Review http://austingroupbugs.net/view.php?id=374 .\" to see what changes are required on this page. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH MALLOC 3 "9 juni 2020" GNU "Linux Programmeurs Handleiding" .SH NAAM malloc, free, calloc, realloc \- reserveren en vrijmaken van dynamisch geheugen .SH SAMENVATTING .nf \fB#include \fP .PP \fBvoid *malloc(size_t \fP\fIgrootte\fP\fB);\fP \fBvoid free(void \fP\fI*wzr\fP\fB);\fP \fBvoid *calloc(size_t \fP\fInmemb\fP\fB, size_t \fP\fIgrootte\fP\fB);\fP \fBvoid *realloc(void \fP\fI*wzr\fP\fB, size_t \fP\fIgrootte\fP\fB);\fP \fBvoid *reallocarray(void \fP\fI*wzr\fP\fB, size_t \fP\fInmemb\fP\fB, size_t \fP\fIgrootte\fP\fB);\fP .fi .PP .RS -4 Test Macro´s in glibc (zie \fBfeature_test_macros\fP(7)): .RE .PP \fBreallocarray\fP(): .ad l _GNU_SOURCE Sinds glibc 2.29: _DEFAULT_SOURCE Glibc 2.28 en eerder: _GNU_SOURCE .ad .SH BESCHRIJVING .\" glibc does this: De \fBmalloc\fP() functie reserveert \fIgrootte\fP bytes geheugen en geeft een wijzer naar het gereserveerde geheugen terug. \fIHet geheugen wordt niet geinitialiseerd\fP. Als \fIgrootte\fP gelijk is aan 0, dan retourneert \fBmalloc\fP() ofwel een NULL ofwel een unieke wijzer waarde sdie later kan worden mee gegeven aan \fBfree\fP(). .PP De \fBfree\fP() functie maakt de geheugen\-ruimte waar \fIwzr\fP naar wijst vrij, geheugen dat gereserveerd moet zijn door een eerdere aanroep naar \fBmalloc\fP(), \fBcalloc\fP() of \fBrealloc\fP(). Anders, of als \fIfree(wzr)\fP al eerder werd aangeroepen, ontstaat onbepaald gedrag. Als \fIwzr\fP \fBNULL\fP is wordt niets gedaan. .PP .\" glibc does this: De \fBcalloc\fP() reserveert geheugen voor een tabel van \fInmemb\fP elementen ter van \fIgrootte\fP bytes, en geeft een wijzer naar het toegewezen geheugen terug. Het geheugen wordt ge`nul'd. Als \fInmemb\fP of \fIgrootte\fP gelijk is aan 0, dan geeft \fBcalloc\fP() ofwel een NULL terug ofwel een unieke wijzer waarde die later succesvol mee gegeven kan worden aan \fBfree\fP(). Als de vermenigvuldiging van \fInmemb\fP en \fIgrootte\fP zou resulteren in een geheel getal overloop, dan geeft \fBcalloc\fP() een foutmelding. In tegenstelling tot dit zou een geheel getal overloop niet opgemerkt worden in de volgende aanroep van \fBmalloc\fP(), met als resultaat dat een blok geheugen met een niet correct grootte gereserveerd zou worden: .PP .in +4n .EX malloc(nmemb * grootte); .EE .in .PP De \fBrealloc\fP() functie verandert de grootte van het geheugen\-blok waar \fIwzr\fP naar wijst in \fIgrootte\fP 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 \fIwzr\fP \fBNULL\fP is, dan is de aanroep gelijk aan \fBmalloc(grootte)\fP; als grootte gelijk aan nul is, dan is de aanroep gelijk aan \fIfree(wzr)\fP. Tenzij \fIwzr\fP \fBNULL\fP is, moet het teruggegeven zijn door een eerdere aanroep naar \fBmalloc\fP(), \fBcalloc\fP() of \fBrealloc\fP(). Als het gebied waarnaar gewezen werd werd verplaatst dan wordt een \fIfree(wzr)\fP uitgevoerd. .PP De \fBreallocarray\fP() functie verandert de grootte van het blok aangewezen door \fIptr\fP om groot genoeg te zijn voor een tabel van \fInmemb\fP elementen, elk met een grootte van \fIgrootte\fP bytes. Dit is equivalent aan de aanroep: .PP .in +4n realloc(ptr, nmemb * grootte); .in .PP Echter, anders dan de \fBrealloc\fP() aanroep, \fBreallocarray\fP() faalt veilig in het geval dat de multiplicatie zou overlopen. Als zo een overloop optreed, \fBreallocarray\fP() retourneert een NULL, zet \fIerrno\fP op \fBENOMEM\fP, en laat het originele geheugen blok onveranderd. .SH "EIND WAARDE" De \fBcalloc\fP() en \fBmalloc\fP() 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 \fBmalloc\fP() met een \fIgrootte\fP van nul, of bij een succesvolle aanroep van \fBcalloc\fP() met \fInmemb\fP of \fIgrootte\fP gelijk aan nul. .PP De \fBfree\fP() functie geeft geen waarde terug. .PP De \fBrealloc\fP() 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 \fIwzr\fP als de reservering niet was verplaatst (b.v. er was ruimte om de ruimte uit te breiden), of verschillend van \fIwzr\fP als de reservering was verplaatst naar een nieuw adres. Als \fIgrootte\fP gelijk was aan 0, wordt ofwel NULL of een wijzer bruikbaar om door te geven aan \fBfree\fP() terug gegeven. Als \fBrealloc\fP() faalt, dan wordt het originele blok niet aangeraakt; het wordt niet vrijgegeven of verplaatst. .PP Bij succes geeft de \fBreallocarray\fP() functie een wijzer naar het nieuw gereserveerde geheugen terug. Na falen, retourneert het NULL en het originele blok geheugen wordt niet verandert. .SH FOUTEN \fBcalloc\fP(), \fBmalloc\fP(), \fBrealloc\fP(), en \fBreallocarray\fP() kunnen falen met de volgende fout: .TP \fBENOMEM\fP Geen geheugen meer. Mogelijk, het programma bereikte de \fBRLIMIT_AS\fP of \fBRLIMIT_DATA\fP limiet beschreven in \fBgetrlimit\fP(2). .SH VERSIES \fBreallocarray\fP() verscheen voor het eerst in glibc in versie 2.26. .SH ATTRIBUTEN Voor een uitleg van de termen in deze sectie, zie \fBattributes\fP(7). .TS allbox; lbw20 lb lb l l l. Interface Attribuut Waarde T{ \fBmalloc\fP(), \fBfree\fP(), .br \fBcalloc\fP(), \fBrealloc\fP() T} Thread veiligheid MT\-Safe .TE .SH "VOLDOET AAN" \fBmalloc\fP(), \fBfree\fP(), \fBcalloc\fP(), \fBrealloc\fP(): POSIX.1\-2001, POSIX.1\-2008, C89, C99. .PP \fBreallocarray\fP() is a niet\-standard uitbreiding die voor het eerst verscheen in OpenBSD 5.6 and FreeBSD 11.0. .SH OPMERKINGEN Standaard volgt, Linux een optimistische geheugen toewijzing strategie. Dit betekent dat wanneer \fBmalloc\fP() 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 \fI/proc/sys/vm/overcommit_memory\fP en \fI/proc/sys/vm/oom_adj\fP in \fBproc\fP(5), en het Linux kernel bron code bestand and the Linux \fIDocumentation/vm/overcommit\-accounting.rst\fP. .PP Normaliter kent \fBmalloc\fP() geheugen toe van de heap en past de grootte van de heap aan zoals vereist, gebruikmakende van \fBsbrk\fP(2). Bij het toekennen van blokken geheugen groter dan \fBMMAP_THRESHOLD\fP bytes kent de glibc \fBmalloc\fP() implementatie het geheugen toe als een private anoniem tabel met behulp van \fBmmap\fP(2). \fBMMAP_THRESHOLD\fP is standaard 128 \ kB, maar is instelbaar m.b.v. \fBmallopt\fP(3). Voor Linux 4.7 werden toekenningen gedaan met \fBmmap\fP(2) niet beïnvloed door de \fBRLIMIT_DATA\fP bron limiet; vanaf Linux 4.7, wordt deze limiet afgedwongen voor toekenningen gedaan met \fBmmap\fP(2). .PP 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 \fImemory allocation areas\fP zodra semafoor botsingen worden gedetecteerd. Elk gebied is een grote geheugen regio die intern toegekend wordt door het systeem (m.b.v. \fBbrk\fP(2) of \fBmmap\fP(2)), en bewaakt met zijn eigen semaforen. .PP SUSv2 vereist \fBmalloc\fP(2), \fBcalloc\fP(), en \fBrealloc\fP() om \fIerrno\fP op \fBENOMEM\fP 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 \fIerrno\fP niet zet, dan kunnen bibliotheek routines falen zonder opgaaf van reden in \fIerrno\fP. .PP Crashes in \fBmalloc\fP(), \fBcalloc\fP(), \fBrealloc\fP(), of \fBfree\fP() zijn bijna altijd gerelateerd aan corruptie van de heap, zoals overlopen van een toegekend gebied or twee keer vrij geven van dezelfde wijzer. .PP De \fBmalloc\fP() implementatie is aanpasbaar via omgeving variabelen; zie \fBmallopt\fP(3) voor details. .SH "ZIE OOK" .\" http://g.oswego.edu/dl/html/malloc.html .\" A Memory Allocator - by Doug Lea .\" .\" http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html .\" Linux Heap, Contention in free() - David Boreham .\" .\" http://www.citi.umich.edu/projects/linux-scalability/reports/malloc.html .\" malloc() Performance in a Multithreaded Linux Environment - .\" Check Lever, David Boreham .\" .ad l .nh \fBvalgrind\fP(1), \fBbrk\fP(2), \fBmmap\fP(2), \fBalloca\fP(3), \fBmalloc_get_state\fP(3), \fBmalloc_info\fP(3), \fBmalloc_trim\fP(3), \fBmalloc_usable_size\fP(3), \fBmallopt\fP(3), \fBmcheck\fP(3), \fBmtrace\fP(3), \fBposix_memalign\fP(3) .PP Voor details over de GNU C library implementatie, zie .UR https://sourceware.org/glibc/wiki/MallocInternals .UE . .SH COLOFON Deze pagina is onderdeel van release 5.10 van het Linux \fIman\-pages\fP\-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. .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Mario Blättermann en Luc Castermans . Deze vertaling is vrije documentatie; lees de .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE 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 .MT debian-l10n-dutch@lists.debian.org .ME .