Provided by: manpages-pl-dev_0.7-1_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.

BŁĘDY

       calloc(), malloc() i realloc() mogą zawieść z następującym błędem:

       ENOMEM Brak  wolnej  pamięci.  Prawdopodobnie aplikację dotknął limit RLIMIT_AS lub RLIMIT_DATA opisany w
              getrlimit(2).

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
       ┌──────────────────────┬────────────────────────┬─────────┐
       │ InterfejsAtrybutWartość │
       ├──────────────────────┼────────────────────────┼─────────┤
       │ malloc(), free(),    │ Bezpieczeństwo wątkowe │ MT-Safe │
       │ calloc(), realloc()  │                        │         │
       └──────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008, 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.

       SUSv2 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 4.07 projektu Linux man-pages. 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/.

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

GNU                                                2015-08-08                                          MALLOC(3)