Obiekty alokowane na stercie
Bardzo ważnym rodzajem obiektów są obiekty tworzone na stercie. W tym przypadku to programista sam decyduje o zakresie ważności i czasie życia obiektu.
Obiekty takie tworzymy (na przykład) przy pomocy operatorów new oraz new[]a usuwamy z pamięci przy pomocy operatorów delete oraz delete[]. W języku C alokację pamięci na stercie wykonuje się za pomocą funkcji bibliotecznych, np. malloc, realloc, itp.
{
int* wsk = new int;
....
delete wsk;
}
- W podanym przykładzie mamy dwa obiekty
- pierwszy z nich to wskaźnik wsk. Jest to zwykła zmienna lokalna.
- drugi obiekt, to ten utworzony na stercie. Nie ma on swojego identyfikatora, a dostęp do niego mamy za pomocą zmiennej wskaźnikowej.
- Czas życia obiektu utworzonego na stercie, to czas od momentu jego utworzenia przez system operacyjny po użyciu new, do czasu jego usunięcia przez system operacyjny po wykonaniu delete
- zakres ważności zmiennej zależy od konkretnego programu. Zmienna jest ważna dopóty, dopóki jest chociaż jedna zamienna (wskaźnik, referencja), za pomocą której mamy dostęp do tego obiektu
- Obiekty alokowane na stercie nie są usuwane.
- Poprawny program powinien przed zakończeniem wykonywania zwolnić całą pamięć, jaka została zaalokowana na stercie.
- Współczesne systemy operacyjne odzyskują pamięć, która nie została zwolniona, jednak brak zwolnienia pamięci może być przesłanką do poważnych błędów w programie, oraz tak zwanych wycieków pamięci.
- Długo działający proces z wyciekami pamięci może doprowadzić do zajęcia całych zasobów komputera.