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 dynamicznych).
W języku C/C++ program może składać się z wielu modułów. Po kompilacji programu (modułu) utworzony zostanie kod wykonywalny (wynikowy), 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).
Darmowy hosting zapewnia PRV.PL