Kurs programowania w C cz. 103

Nasza ocena:

5
Wyświetleń: 476
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C cz. 103 - strona 1

Fragment notatki:

120 ROZDZIAŁ 17. WSKAŹNIKI Wskaźniki na stałą wartość są przydatne między innymi w sytuacji gdy mamy duży obiekt (na przykład  strukturę  z kilkoma polami). Jeśli przypiszemy taką zmienną do innej zmiennej, kopiowanie może potrwać dużo czasu, a oprócz tego zostanie zajęte dużo pamięci. Przekazanie takiej struktury do funkcji albo zwrócenie jej jako wartość funkcji wiąże się z takim samym narzutem. W takim wypadku dobrze jest użyć wskaźnika na stałą wartość. void funkcja(const duza_struktura *ds) { /* czytamy z ds i wykonujemy obliczenia */ } funkcja(&dane); /* mamy pewność, Å¼e zmienna dane nie zostanie zmieniona */ Dynamiczna alokacja pamięci Mając styczność z tablicami można się zastanowić, czy nie dałoby się mieć tablic, których rozmiar dostosowuje się do naszych potrzeb a nie jest na stałe zaszyty w kodzie programu. Chcąc pomieścić więcej danych możemy po prostu zwiększyć rozmiar tablicy â€” ale gdy do przechowania będzie mniej elementów okaże się, Å¼e marnujemy pamięć. Język C umożliwia dzięki wskaźnikom i dynamicznej alokacji pamięci tworzenie tablic takiej wielkości, jakiej akurat potrzebujemy. O co chodzi Czym jest dynamiczna alokacja pamięci? Normalnie zmienne programu przechowywane są na tzw. stosie (ang.  stack  ) â€” powstają, gdy program wchodzi do bloku, w którym zmienne są zadeklarowane a zwalniane w momencie, kiedy program opuszcza ten blok. Jeśli deklaru- jemy tak tablice, to ich rozmiar musi być znany w momencie kompilacji â€” Å¼eby kompilator wygenerował kod rezerwujący odpowiednią ilość pamięci. Dostępny jest jednak drugi rodzaj rezerwacji (czyli alokacji) pamięci. Jest to alokacja na stercie (ang.  heap ). Sterta to obszar pamięci wspólny dla całego programu, przechowywane są w nim zmienne, których czas Å¼y- cia nie jest związany z poszczególnymi blokami. Musimy sami rezerwować dla nich miejsce i to miejsce zwalniać, ale dzięki temu możemy to zrobić w dowolnym momencie działania programu. Należy pamiętać, Å¼e rezerwowanie i zwalnianie pamięci na stercie zajmuje więcej czasu niż analogiczne działania na stosie. Dodatkowo, zmienna zajmuje na stercie więcej miejsca niż na stosie â€” sterta utrzymuje specjalną strukturę, w której trzymane są wolne partie (może to być np.  lista ). Tak więc używajmy dynamicznej alokacji tam, gdzie jest potrzebna â€” dla danych,

(…)

…. W takim wypadku dobrze jest użyć wskaźnika na stałą wartość.
void funkcja(const duza_struktura *ds)
{
/* czytamy z ds i wykonujemy obliczenia */
}
funkcja(&dane); /* mamy pewność, że zmienna dane nie zostanie zmieniona */
Dynamiczna alokacja pamięci
Mając styczność z tablicami można się zastanowić, czy nie dałoby się mieć tablic, których
rozmiar dostosowuje się do naszych potrzeb a nie jest na stałe…
... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz