Rechercher une page de manuel
malloc
Langue: pl
Version: 1993-04-04 (openSuse - 09/10/07)
Section: 3 (Bibliothèques de fonctions)
NAZWA
calloc, malloc, free, realloc - przydziela i zwalnia pamiêæ dynamiczn±SK£ADNIA
#include <stdlib.h> void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size);
OPIS
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.malloc() przydziela size bajtów i zwraca wska¼nik do przydzielonej pamiêci. Pamiêæ nie jest czyszczona.
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.
realloc() zmienia rozmiar bloku pamiêci wskazywanego przez ptr na size bajtów. Zawarto¶æ nie zostanie zmieniona w zakresie poni¿ej minimum ze starego i nowego rozmiaru; nowo przydzielona pamiêæ nie zostanie zainicjalizowana. Je¶li ptr jest równe NULL, to wywo³anie jest równowa¿ne malloc(size); je¶li size jest równe zeru, to wywo³anie jest równowa¿ne free(ptr). O ile ptr nie jest równe NULL, musi ono byæ zwrócone przez wcze¶niejsze wywo³anie malloc(), calloc() lub realloc().
WARTO¦Æ ZWRACANA
Dla calloc() i malloc(), zwracana warto¶æ jest wska¼nikiem do przydzielonej pamiêci, który jest w³a¶ciwie wyrównany dla dowolnego rodzaju zmiennej, lub NULL gdy ¿±danie zakoñczy³o siê niepowodzeniem.free() nie zwraca ¿adnej warto¶ci.
realloc() zwraca wska¼nik do nowoprzydzielonej pamiêci, który jest w³a¶ciwie wyrównany dla dowolnego rodzaju zmiennej i mo¿e byæ ró¿ny od ptr, lub NULL gdy ¿±danie zakoñczy siê niepowodzeniem. Je¶li rozmiar by³ równy 0, zwracane jest NULL lub 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
ANSI-CZOBACZ TAK¯E
brk(2), posix_memalign(3)UWAGI
Standard Unix98 wymaga, by malloc(), calloc() i realloc() przy wyst±pieniu b³êdu nadawa³y 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() czy realloc() s± niemal zawsze zwi±zane z uszkodzeniami sterty, takimi jak przekroczenia rozmiaru przydzielonego fragmentu lub dwukrotne zwolnienie tego samego wska¼nika.
Nowe wersje linuksowej biblioteki libc (pó¼niejsze ni¿ 5.4.23) i GNU libc (2.x) zawieraj± implementacjê malloc, któr± mo¿na dostrajaæ za po¶rednictwem zmiennych ¶rodowiskowych. Przy ustawionej zmiennej MALLOC_CHECK_ stosowana jest specjalna (mniej wydajna) implementacja. Zgodnie z zamierzeniami, powinna byæ bardziej odporna na proste b³êdy, jak podwójne wywo³ania free() z tym samym argumentem czy przekroczenia o pojedynczy bajt (b³êdy off-by-one). Nie chroni jednak przed wszystkimi tego rodzaju b³êdami, w wyniku których mog± powstaæ wycieki pamiêci. Je¶li MALLOC_CHECK_ ma warto¶æ 0, jakiekolwiek wykryte uszkodzenie sterty zostanie milcz±co zignorowane; je¶li ma warto¶æ 1, na stderr wypisywany bêdzie komunikat diagnostyczny; je¶li ma warto¶æ 2, to natychmiast zostanie wywo³ane abort(). Mo¿e siê to przydaæ, gdy¿ w przeciwnym razie za³amanie siê mog³oby wyst±piæ du¿o pó¼niej, a prawdziwa przyczyna k³opotów by³aby wówczas bardzo trudna do wy¶ledzenia.
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 zabije jeden lub wiêcej procesów.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre