.\" 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 req	uired 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) <ankry@mif.pg.gda.pl>, 2001.
.\" Robert Luberda <robert@debian.org>, 2013.
.\" Michał Kułach <michal.kulach@gmail.com>, 2014.
.TH MALLOC 3 2014\-05\-21 GNU "Podręcznik programisty Linuksa"
.SH NAZWA
malloc, free, calloc, realloc \- przydziela i zwalnia pamięć dynamiczną
.SH SKŁADNIA
.nf
\fB#include <stdlib.h>\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 "ZGODNE Z"
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.

Standard UNIX 98 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 3.71 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
\%http://www.kernel.org/doc/man\-pages/.
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są:
Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>.
.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 3.71 \fPoryginału.
