home
MODELE PAMIĘCI



Modele pamięci Adresowanie oparte na segmentach (selektorach) jest ściśle powiązane ze strukturą programu wykonywalnego (exe), który zawiera instrukcje programu oraz wykorzystywane stałe i zmienne globalne. W momencie uruchomienia programu przydzielany jest w pamięci komputera obszar przeznaczony dla kodu programu (segment kodu), obszar przeznaczony dla danych (segment danych) i obszar przeznaczony dla zmiennych lokalnych, parametrów i adresów powrotu z wywołań funkcji (segment stosu) oraz rezerwowany jest obszar przeznaczony dla zmiennych dynamicznych - nazywany stertą (stosem zmiennych dynami­cznych). W języku C/C++ program może składać się z wielu modułów. Po kom­pi­la­cji programu (modułu) utworzony zostanie kod wykonywalny (wyniko­wy), który może składać się z następujących segmentów: kodu (instrukcje do wykonania), danych zainicjowanych (np. stałe), danych niezainicjowanych, stosu (zmienne automatyczne i parametry funkcji), sterty (stosu zmiennych dynamicznych). Każdy z tych segmentów posiada swoją nazwę i klasę, które są łańcuchami znaków (np. segment kodu jest klasy CODE i ma domyślną nazwę _TEXT). Klasa stanowi informację dla programu łączącego o sposobie łączenia i kolejności rozmieszczania w pamięci segmentów należących do poszczególnych modułów. W systemie BC++ 3.1 rozmiar segmentów kodu i danych nie może przekroczyć 64KB dla pojedynczego modułu programu. Stos programu nie może przekroczyć 64KB, natomiast sterta może zajmować całą dostępną pamięć (ograniczenia wynikają z możliwości kompilatora). W przypadku programów wielomodułowych całkowity rozmiar kodu i danych programu oraz rozmieszczenie modułów w pamięci zależy od przyjmowanego w kompilatorze modelu pamięci. Na przykład system BC++ 3.1 oferuje sześć modeli: TINY, SMALL, MEDIUM, COMPACT, LARGE i HUGE (BCW++3.1 – modele: SMALL, MEDIUM, COMPACT, LARGE). Każdy z tych modeli nakłada pewne ograniczenia na maksymalny rozmiar obszaru danych, rozmiar kodu programu oraz domyślny typ wskaźników kodu i danych (wskaźniki dalekie lub bliskie). We wszystkich modelach, oprócz modelu HUGE, obszar danych statycznych jest wspólny dla wszystkich modułów programu, a jego rozmiar nie może przekroczyć 64KB. W modelu TINY maksymalny rozmiar, łącznie, kodu i danych (łącznie ze stertą, tj. obszarem zmiennych dynamicznych) nie może przekroczyć 64KB. Model SMALL ogranicza kod do 64KB i dane do 64KB. W modelu MEDIUM kod jest ograniczony do 1MB, natomiast dane do 64KB. Model COMPACT ogranicza kod do 64KB oraz dane do 1MB. W modelach LARGE i HUGE kod i dane, każde z osobna, nie mogą przekroczyć 1MB. Model pamięci określa domyślny typ wskaźników kodu i danych (wskaźniki dalekie lub bliskie). W szczególności, wskaźnik zdefiniowany jako int *wsk jest wskaźnikiem bliskim (dwubajtowym) w modelach TINY, SMALL i MEDIUM, natomiast wskaźnikiem dalekim w pozostałych modelach. Model Ograniczenia Wskaźniki: Kod Dane TINY Kod + Dane < 64KB Bliskie Bliskie SMALL Kod < 64KB, Dane < 64KB Bliskie Bliskie MEDIUM Kod < 1MB, Dane < 64KB Dalekie Bliskie COMPACT Kod < 64KB, Dane < 1MB Bliskie Dalekie LARGE Kod < 1MB, Dane < 1MB Dalekie Dalekie HUGE Kod < 1MB, Dane < 1MB Dalekie Dalekie We wszystkich modelach pamięci jedynie zmienne automatyczne i parametry funkcji posiadają ściśle określone, niezależne od modelu pamięci miejsce przechowywania - stos procesora (segment stosu).