Fragmentacja pamięci: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
→‎Fragmentacja wewnętrzna: -> strony są na dysku, są logiczne, otrzyma jak już całą ramkę . . .
Linia 3:
==Fragmentacja wewnętrzna==
 
Wynika z natury zarządców pamięci, które albo z przyczyn technicznych, albo wydajnościowych, nie operują na obszarach o dowolnym rozmiarze, lecz blokach danych będących wielokrotnością określonej liczby [[bajt]]ów. Np. na [[dysk twardy|dyskach twardych]] jednostką jest sektor (mający zwykle pół kilobajta), [[system plików|systemy plików]] operują na [[klaster dyskowy|klastrach]] składających się z kilku-kilkunastu sektorów dyskowych, [[system operacyjny|systemy operacyjne]] przydzielają aplikacjom [[stronicowanie pamięci|strony]] (np. w procesorach [[x86]] strona ma rozmiar 4kB), zaś wewnętrznie aplikacje zwykle alokują pamięć w jednostkach kilku, kilkunastu bajtów (np. w bibliotece [[GNU]] [[libc]] to 8 lub 16 bajtów). Ponieważ przydzielana jest pamięć o rozmiarze zaokrąglonym w górę do wielokrotności rozmiaru bloku, toteż nadwyżka po pierwsze nie jest używana przez aplikację, po drugie zaś zarządca pamięci nie może jej oddać innej aplikacji. Pamięć taka jest marnowana - np. plik o rozmiarze 1 bajta w istocie zajmie cały klaster, czyli kilka kB - i te kilka kB minus 1 bajt pozostanie niewykorzystane, podobnie jeśli program zażąda od systemu operacyjnego przydzielenia 1 bajta, otrzyma całą stronęramkę.
 
Fragmentacja wewnętrzna jest czasami rozwiązywana na poziomie aplikacji poprzez zastosowanie specjalizowanych zarządców pamięci. Częstym rozwiązaniem są tzw. pule pamięci (ang. ''memory pool''), które operują na blokach o rozmiarze ściśle wymaganym przez aplikację, co praktycznie eliminuje ten rodzaj fragmentacji.