Co to jest dynamiczna alokacja pamięci?
Dynamiczny przydział pamięci, zwany także przydziałem pamięci opartym na stercie, jest rodzajem zarządzania pamięcią, któremu wyraźnie przeciwdziała statyczny przydział pamięci. W przypadku dynamicznego przydzielania pamięci programista informuje komputer dokładnie, ile pamięci należy przeznaczyć dla każdego programu i jak długo trzymać w pamięci. To rozwiązuje wiele problemów, które występują podczas statycznej alokacji pamięci, takich jak nadmierne użycie pamięci i zablokowane programy. Chociaż rozwiązuje wiele problemów, jeśli programista zapomni powiedzieć pamięci o zrzuceniu, 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 jeśli przechowywana pamięć staje się niebezpieczna lub stanowi przeszkodę dla wydajności. Na przykład, jeśli użytkownik przestanie uruchamiać program, który pobiera 2 megabajty (MB) na maszynie o pojemności 3 MB, a drugi program potrzebuje kolejnych 2 MB, drugi program nie będzie działać. Jest tak, ponieważ w komputerze nie ma wystarczającej ilości pamięci dla drugiego programu.
Przy statycznym przydziale pamięci użytkownik lub programista nie może określić ilości pamięci, którą chce przechowywać, ani też programista nie może powiedzieć statycznej pamięci, aby zrzuciła pamięć w celu zwolnienia zasobów. Właśnie dlatego zaawansowani użytkownicy często korzystają z dynamicznej alokacji pamięci. Programista może kontrolować wszystko o pamięci, w tym czas utrzymywania zasobów.
Na przykład programista może ustawić dynamiczny przydział pamięci, aby zatrzymać tylko 1 MB lub mniej, co zaoszczędziłoby wystarczającą ilość pamięci systemowej, aby umożliwić otwarcie innych programów. Można to zrobić, ponieważ pamięć statyczna zwykle trzyma wszystko na temat programu, a pamięć dynamiczna pozwala programistom ustawić niższą wartość, która przechowuje niektóre dane, ale nie wszystko. Jednocześnie pamięć statyczna będzie nadal potrzebna i można ją ustawić w tym schemacie alokacji.
Potencjalny problem z dynamiczną alokacją pamięci - taką, która 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 zostanie ustawiona żadna wartość czasu, w przeciwieństwie do pamięci statycznej, która ostatecznie ją zwolni, pamięć dynamiczna zachowa informację. Jeśli program ma aplikację zrzutu pamięci, a większość z nich tak, aktywuje się po pewnym czasie w celu wyczyszczenia pamięci. Nadal najlepszą praktyką jest ustawienie wartości czasu dla przydziału pamięci.