.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) .\" .\" %%%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. .\" .\"******************************************************************* .\" This file is distributed under the same license as original manpage .\" Copyright of the original manpage: .\" Copyright © 1993 Thomas Koenig .\" Copyright © of Polish translation: .\" Andrzej Krzysztofowicz (PTM) , 2001. .\" Robert Luberda , 2013, 2017. .\" Michał Kułach , 2014, 2016. .TH MALLOC 3 2015\-08\-08 GNU "Podręcznik programisty Linuksa" .SH NAZWA malloc, free, calloc, realloc \- przydziela i zwalnia pamięć dynamiczną .SH SKŁADNIA .nf \fB#include \fP .sp \fBvoid *malloc(size_t \fP\fIsize\fP\fB);\fP \fBvoid free(void \fP\fI*ptr\fP\fB);\fP \fBvoid *calloc(size_t \fP\fInmemb\fP\fB, size_t \fP\fIsize\fP\fB);\fP \fBvoid *realloc(void \fP\fI*ptr\fP\fB, size_t \fP\fIsize\fP\fB);\fP .fi .SH OPIS .PP .\" glibc does this: Funkcja \fBmalloc\fP() przydziela pamięć o rozmiarze \fIsize\fP bajtów i zwraca wskaźnik do przydzielonej pamięci. \fIPamięć nie jest inicjowana\fP. Jeśli \fIsize\fP wynosi 0, to \fBmalloc\fP() zwraca albo NULL, albo unikatową wartość wskaźnika, który potem można z powodzeniem przekazać do \fBfree\fP(). .PP Funkcja \fBfree\fP() zwalnia obszar pamięci wskazywany przez \fIptr\fP, który został wcześniej przydzielony za pomocą wywołania \fBmalloc\fP(), \fBcalloc\fP() lub \fBrealloc\fP(). W przeciwnym przypadku lub gdy \fIfree(ptr)\fP zostało już wcześniej wywołane, funkcja zachowa się w sposób nieokreślony. Jeśli \fIptr\fP jest równe NULL, nie zostanie wykonana żadna operacja. .PP .\" glibc does this: Funkcja \fBcalloc\fP() przydziela pamięć dla tablicy zawierającej \fInmemb\fP elementów, każdy o rozmiarze \fIsize\fP bajtów i zwraca wskaźnik do przydzielonej pamięci. Pamięć jest zerowana. Jeśli \fInmemb\fP lub \fIsize\fP wynosi 0, to \fBcalloc\fP() zwraca albo NULL, albo unikatową wartość wskaźnika, który potem można z powodzeniem przekazać do \fBfree\fP(). .PP Funkcja \fBrealloc\fP() zmienia rozmiar bloku pamięci wskazywanego przez \fIptr\fP na \fIsize\fP bajtów. Zawartość nie zostanie zmieniona w zakresie od początku obszaru do minimum ze starego i nowego rozmiaru. Jeśli nowy rozmiar jest większy od starego, to dodana pamięć \fInie\fP zostanie zainicjowana. Jeśli \fIptr\fP jest równe NULL, to wywołanie jest równoważne \fImalloc(size)\fP dla wszystkich wartości \fIsize\fP; jeśli \fIsize\fP jest równe zeru i \fIptr\fP jest różny od NULL, to wywołanie jest równoważne z \fIfree(ptr)\fP. Jeżeli \fIptr\fP jest różne od NULL, to musi on pochodzić z wcześniejszego wywołania \fBmalloc\fP(), \fBcalloc\fP() lub \fBrealloc\fP(). Jeśli wskazywany obszar został przemieszczony, to wykonywane jest \fIfree(ptr)\fP. .SH "WARTOŚĆ ZWRACANA" Funkcje \fBmalloc\fP() i \fBcalloc\fP() zwracają wskaźnik do przydzielonej pamięci, który jest odpowiednio wyrównany dla dowolnego typu wbudowanego. W razie błędu obie funkcje zwracają NULL. NULL może być także zwrócony przez pomyślne wywołanie \fBmalloc\fP() z argumentem \fIsize\fP równym zero lub przez pomyślne wywołanie \fBcalloc\fP() z argumentem \fInmemb\fP lub \fIsize\fP równym zero. .PP Funkcja \fBfree\fP() nie zwraca żadnej wartości. .PP Funkcja \fBrealloc\fP() zwraca wskaźnik do nowo przydzielonej pamięci, który jest właściwie wyrównany dla dowolnego typu wbudowanego i może być różny od \fIptr\fP lub równy NULL, gdy żądanie zakończy się niepowodzeniem. Jeśli rozmiar był równy 0, zwracane jest albo NULL, albo wskaźnik odpowiedni do przekazania go funkcji \fBfree\fP(). Gdy \fBrealloc\fP() zakończy się niepowodzeniem, pierwotny blok zostaje nienaruszony \- nie jest on ani zwalniany ani przesuwany. .SH BŁĘDY \fBcalloc\fP(), \fBmalloc\fP() i \fBrealloc\fP() mogą zawieść\ z następującym błędem: .TP \fBENOMEM\fP Brak wolnej pamięci. Prawdopodobnie aplikację dotknął limit \fBRLIMIT_AS\fP lub \fBRLIMIT_DATA\fP opisany w \fBgetrlimit\fP(2). .SH ATRYBUTY Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku \fBattributes\fP(7). .TS allbox; lbw20 lb lb l l l. Interfejs Atrybut Wartość T{ \fBmalloc\fP(), \fBfree\fP(), .br \fBcalloc\fP(), \fBrealloc\fP() T} Bezpieczeństwo wątkowe MT\-Safe .TE .SH "ZGODNE Z" POSIX.1\-2001, POSIX.1\-2008, C89, C99. .SH UWAGI Linux stosuje optymistyczną strategię przydzielania pamięci. Oznacza to, że gdy \fBmalloc\fP() zwraca wartość różną od NULL, nie ma gwarancji, iż pamięć faktycznie jest dostępna. Jeśli okaże się, że systemowi brakło pamięci, niesławny zabójca OOM ("out\-of\-memory killer") zabije jeden lub więcej procesów. Więcej informacji zawiera opis plików \fI/proc/sys/vm/overcommit_memory\fP i \fI/proc/sys/vm/oom_adj\fP w \fBproc\fP(5) oraz plik \fIDocumentation/vm/overcommit\-accounting\fP w źródłach jądra Linuksa. Zwykle \fBmalloc\fP() przydziela pamięć ze sterty i ustawie wymagany rozmiar sterty, używając \fBsbrk\fP(2). Podczas przydzielania bloków pamięci większych niż \fBMMAP_THRESHOLD\fP bajtów, implementacja \fBmalloc\fP() w glibc używa prywatnych anonimowych map z \fBmmap\fP(2). \fBMMAP_THRESHOLD\fP domyślnie wynosi 128 kB, ale można to zmienić za pomocą \fBmallopt\fP(3). Limit zasobów \fBRLIMIT_DATA\fP (patrz \fBgetrlimit\fP(2)) nie ma zastosowania do pamięci przydzielonej przy użyciu \fBmmap\fP(2). Aby uniknąć uszkodzenia pamięci w aplikacjach wielowątkowych, funkcje te wewnętrznie stosują muteksy, chroniące struktury danych odnoszące się do zarządzania pamięcią. W aplikacji wielowątkowej, w której wątki jednocześnie przydzielają i zwalniają pamięć mogą występować oczekiwania na dostęp do muteksów. Aby przydział pamięci w aplikacji wielowątkowej był skalowalny, biblioteka glibc tworzy dodatkowe \fIareny przydziału pamięci\fP, jeśli wykryte zostanie oczekiwanie na mutex. Każda arena jest dużym regionem pamięci wewnętrznie zaalokowanym przez system (za pomocą \fBbrk\fP(2) lub \fBmmap\fP(2)) i jest zarządzana przy użyciu jej własnych muteksów. SUSv2 wymaga, by \fBmalloc\fP(), \fBcalloc\fP() i \fBrealloc\fP() przy wystąpieniu błędu nadawały zmiennej \fIerrno\fP wartość \fBENOMEM\fP. Glibc zakłada, że tak się dzieje (a wersje tych funkcji zawarte w glibc rzeczywiście to robią). Jeśli wykorzystuje się własną implementację malloc, która nie ustawia \fIerrno\fP, to pewne funkcje biblioteczne mogą zawieść bez przekazania przyczyny w \fIerrno\fP. .LP Załamania się w \fBmalloc\fP(), \fBfree\fP(), \fBrealloc\fP() lub \fBfree\fP są niemal zawsze związane z uszkodzeniami sterty, takimi jak przekroczenie rozmiaru przydzielonego fragmentu lub dwukrotne zwolnienie tego samego wskaźnika. .PP Implementację \fBmalloc\fP() można dostosowywać za pomocą zmiennych środowiskowych. Szczegóły opisano w \fBmallopt\fP(3). .SH "ZOBACZ TAKŻE" .\" 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 \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) .SH "O STRONIE" Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux \fIman\-pages\fP. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem \%https://www.kernel.org/doc/man\-pages/. .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Andrzej Krzysztofowicz (PTM) , Robert Luberda i Michał Kułach . .PP Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją \fB 4.07 \fPoryginału.