Modele pamięci



Dyrektywa model powoduje wybranie standardowego modelu pamięci dla programu w języku asembler. Model pamięci to konfiguracja decydująca o sposobie użycia połączenia segmentów. Każdy model cechuje się innymi ograniczeniami w zakresie maksymalnej przestrzeni dostępnej dla kodu i danych. Należy również pamiętać, iż wybór modelu ma wpływ na sposób dostępu do podprocedur i danych przez program. Decyzja o wybraniu modelu pamięci stanowi kompromis między wydajnością i wielkością programu. Model ograniczający wszystkie dane do pojedynczego segmentu 64 kB za­pewnia 16-bitowe adresy danych. Umożliwia to wydajniejszy dostęp do danych, ponieważ 16-bitowy adres może być załadowany szybciej niż 32-bitowy adres typu segment-przesunięcie. Z kolei model pamięci umieszczający podprocedury w różnych segmentach wymaga załadowania CS i IP przy każdym wywołaniu adresu takiej podprocedury.

Poszczególne modele pamięci są definiowane przez liczbę bajtów, jaka może być użyta dla kodu (rozkazów) i danych (zmiennych). Jeżeli wielkość kodu zostanie ograniczona do 64 kB, to wszystkie rozkazy będą musiały zmieścić się w pojedynczym segmencie o tej wielkości. Tabela poniżej przedstawia poszczególne modele pamięci. Wszystkie modele z wy­jątkiem Tiny powodują utworzenie programów EXE. Model Tiny generuje program typu COM. Wszystkie modele z wyjątkiem Flat są dostępne w trybie rzeczywistym procesora, a model Flat tylko w trybie chronionym. Przykładem systemu działającego w takim trybie jest Windows NT. Kompilator Microsoft Visual C++ może wygenerować aplikacje konsoli dla Windows 95, które działają w płaskim modelu pamięci.

Model Opis
Tiny Łączna wielkość kodu i danych nie może być większa niż 64 kB
Small Segment kodu <= 64 kB, segment danych <= 64 kB; jeden segment kodu i jeden danych
Medium Segment danych <= 64 kB, kod o dowolnej wielkości; wiele segmentów kodu i jeden segment danych
Compact Segment kodu <= 64 kB, dane o dowolnej wielkości; wiele segmentów danych i jeden segment kodu
Large Segment kodu > 64 kB, segment danych > 64 kB; wiele segmentów kodu i danych
Huge Analogicznie do modelu Large, ale poszczególne zmienne (na przykład tablice) mogą być większe niż 64 kB
Flat Brak segmentów; 32-bitowe adresy są używane zarówno dla kodu, jak i dla danych; tylko tryb chroniony
Copyright by Murathag