Provided by: manpages-pl-dev_0.6-2_all bug

NAZWA

       malloc, free, calloc, realloc - przydziela i zwalnia pamięć dynamiczną

SKŁADNIA

       #include <stdlib.h>

       void *malloc(size_t size);
       void free(void *ptr);
       void *calloc(size_t nmemb, size_t size);
       void *realloc(void *ptr, size_t size);

OPIS

       Funkcja  malloc()  przydziela  pamięć o rozmiarze size bajtów i zwraca wskaźnik do przydzielonej pamięci.
       Pamięć nie jest inicjowana. Jeśli size wynosi 0, to malloc() zwraca albo  NULL,  albo  unikatową  wartość
       wskaźnika, który potem można z powodzeniem przekazać do  free().

       Funkcja free() zwalnia obszar pamięci wskazywany przez ptr, który został wcześniej przydzielony za pomocą
       wywołania  malloc(),  calloc()  lub  realloc().  W  przeciwnym  przypadku  lub  gdy free(ptr) zostało już
       wcześniej wywołane, funkcja zachowa się w sposób nieokreślony. Jeśli ptr jest równe  NULL,  nie  zostanie
       wykonana żadna operacja.

       Funkcja  calloc()  przydziela  pamięć  dla  tablicy  zawierającej nmemb elementów, każdy o rozmiarze size
       bajtów i zwraca wskaźnik do przydzielonej pamięci. Pamięć jest zerowana. Jeśli nmemb lub size  wynosi  0,
       to  calloc()   zwraca  albo  NULL,  albo  unikatową  wartość  wskaźnika,  który potem można z powodzeniem
       przekazać do  free().

       Funkcja realloc() zmienia rozmiar bloku pamięci wskazywanego przez ptr  na  size  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ęć nie zostanie zainicjowana. Jeśli ptr jest  równe  NULL,
       to  wywołanie jest równoważne malloc(size) dla wszystkich wartości size; jeśli size jest równe zeru i ptr
       jest różny od NULL, to wywołanie jest równoważne z free(ptr). Jeżeli ptr jest różne od NULL, to  musi  on
       pochodzić  z  wcześniejszego  wywołania  malloc(), calloc() lub realloc(). Jeśli wskazywany obszar został
       przemieszczony, to wykonywane jest free(ptr).

WARTOŚĆ ZWRACANA

       Funkcje malloc() i calloc() 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 malloc() z argumentem size równym zero lub przez pomyślne wywołanie  calloc()  z
       argumentem nmemb lub size równym zero.

       Funkcja free() nie zwraca żadnej wartości.

       Funkcja  realloc()  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  ptr  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  free().  Gdy  realloc()  zakończy  się  niepowodzeniem,  pierwotny  blok  zostaje
       nienaruszony - nie jest on ani zwalniany ani przesuwany.

ZGODNE Z

       C89, C99.

UWAGI

       Linux  stosuje  optymistyczną strategię przydzielania pamięci. Oznacza to, że gdy malloc() 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 /proc/sys/vm/overcommit_memory i /proc/sys/vm/oom_adj w proc(5) oraz plik
       Documentation/vm/overcommit-accounting w źródłach jądra Linuksa.

       Zwykle malloc() przydziela pamięć ze sterty i ustawie wymagany rozmiar sterty, używając sbrk(2).  Podczas
       przydzielania  bloków  pamięci  większych niż MMAP_THRESHOLD bajtów, implementacja malloc() w glibc używa
       prywatnych anonimowych map z mmap(2). MMAP_THRESHOLD domyślnie wynosi 128 kB, ale  można  to  zmienić  za
       pomocą  mallopt(3).  Limit  zasobów  RLIMIT_DATA  (patrz  getrlimit(2))  nie  ma  zastosowania do pamięci
       przydzielonej przy użyciu mmap(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  areny
       przydziału  pamięci, jeśli wykryte zostanie oczekiwanie na mutex. Każda arena jest dużym regionem pamięci
       wewnętrznie zaalokowanym przez system (za pomocą brk(2) lub mmap(2)) i jest zarządzana  przy  użyciu  jej
       własnych muteksów.

       Standard UNIX 98 wymaga, by malloc(), calloc() i realloc() przy wystąpieniu błędu nadawały zmiennej errno
       wartość  ENOMEM.  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  errno,  to  pewne  funkcje
       biblioteczne mogą zawieść bez przekazania przyczyny w errno.

       Załamania  się  w  malloc(), free(), realloc() lub free są niemal zawsze związane z uszkodzeniami sterty,
       takimi  jak  przekroczenie  rozmiaru  przydzielonego  fragmentu  lub  dwukrotne  zwolnienie  tego  samego
       wskaźnika.

       Implementację  malloc()  można  dostosowywać  za  pomocą  zmiennych  środowiskowych.  Szczegóły opisano w
       mallopt(3).

ZOBACZ TAKŻE

       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)

O STRONIE

       Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux man-pages. 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/.

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>.

       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ą  3.71 oryginału.

GNU                                                2014-05-21                                          MALLOC(3)