Co to jest dynamiczna alokacja pamięci?

Dynamiczna alokacja pamięci, zwana także alokacją pamięci opartą na stercie, to rodzaj zarządzania pamięcią, który jest mocno przeciwstawny statycznej alokacji pamięci. W dynamicznej alokacji pamięci programista dokładnie mówi komputerowi, ile pamięci należy przydzielić dla każdego programu i jak długo przechowywać pamięć. Rozwiązuje to wiele problemów występujących w statycznej alokacji pamięci, takich jak nadużywanie pamięci i zablokowane programy. Chociaż rozwiązuje to wiele problemów, jeśli programista zapomni powiedzieć pamięci do zrzutu, to pamięć dynamiczna może stać się problemem.

Komputery domyślnie używają statycznej alokacji pamięci. Oznacza to, że pamięć przechowuje programy, gdy są używane, nawet jeśli program nie jest już używany lub gdy przechowywana pamięć staje się niebezpieczna lub stanowi przeszkodę dla wydajności. Na przykład, jeśli użytkownik przestanie uruchamiać program, który zajmuje 2 megabajty (MB) na maszynie 3 MB, a drugi program potrzebuje kolejnych 2 MB, drugi program nie będzie działał. Dzieje się tak, ponieważ w komputerze nie ma wystarczającej ilości pamięci dla innego programu.

Przy alokacji pamięci statycznej użytkownik lub programista nie może określić ilości pamięci, którą chce przechowywać, ani też nie może powiedzieć pamięci statycznej, aby zrzuciła pamięć w celu zwolnienia zasobów. Dlatego zaawansowani użytkownicy często korzystają z dynamicznej alokacji pamięci. Programista jest w stanie kontrolować wszystko, co dotyczy pamięci, w tym czas przechowywania zasobów.

Na przykład programista może ustawić dynamiczną alokację pamięci tak, aby trzymał tylko 1 MB lub mniej, co pozwoliłoby zaoszczędzić wystarczającą ilość pamięci systemowej, aby umożliwić otwieranie innych programów. Można to zrobić, ponieważ pamięć statyczna zwykle przechowuje wszystko, co dotyczy programu, podczas gdy pamięć dynamiczna pozwala programistom ustawić ją na niższą wartość, która przechowuje pewne dane, ale nie wszystko. Jednocześnie nadal potrzebna będzie pamięć statyczna, którą można ustawić w tym schemacie alokacji.

Potencjalny problem z alokacją pamięci dynamicznej — taki, który rzadko pojawia się w grze — polega na tym, że pamięć dynamiczna może się zapełnić, jeśli programista zapomni ustawić wartość czasu. Jeśli nie ustawiono żadnej wartości czasu, w przeciwieństwie do pamięci statycznej, która ostatecznie zwolni pamięć, pamięć dynamiczna będzie przechowywać informacje. Jeśli program ma aplikację zrzutu śmieci, a większość z nich ma, aktywuje się po pewnym czasie, aby wyczyścić pamięć. Nadal najlepszą praktyką jest ustawienie wartości czasu dla alokacji pamięci.