МОДЕЛИ ПАМЯТИ

 

C++ поддерживает 7 моделей памяти: tiny, small, medium, compact, large, huge, flat. Для каждой модели различается количество сегментов отведенных под код программы и данных. Рассмотрим эти модели.

 

1. Крошечная модель Tiny -64 Кбайта код программы и данные

 

CS,DS,SS

 

 

SP

 

 

2. Малая модель Small – 64Кбайта код программы и 64 Кбайта данные

CS

DS,SS

 

 

SP

 

3. Средняя модель Medium –1 Мбайт код программы и 64 Кбайта данные

 

CS

 

DS,SS

 

SP

 

4. Компактная модель Compact - 64Кбайта код программы и 1 Мбайт данные

 

CS

 

DS

 

SS

 

SP

 

5.Большая модель Large –1 Мбайт код программы и 1 Мбайт данные

CS

 

 

DS

 

SS

 

 

SP

 

 

6. Гигантская модель Huge -1 Мбайт код программы и 1 Мбайт данные

 

CS

 

 

DS

 

 

SS

 

SP

 

 

7.Плоская модель Flat.

Модель Flat соответствует варианту модели Small, но используется 32 разрядные смещения (суммарная длина адреса 6 байт). Эта модель используется только для МП 386 и выше. В этом случае с помощью одного регистра обеспечивается доступ ко всей физической памяти. Хотя регистры DS, SS, ES отличаются, они фактически указывают на один физический адрес начала сегмента (дескрипторы имеют одинаковый адрес и длину сегмента, но разные права доступа к элементам памяти внутри сегмента). Эта модель используется для программ для Windows.

 

Размер кода или данных ограничен адресной памятью (1 Мбайт).

tiny 64 Кб всего

small 64 Кб кода и 64 Кб данные

medium 1Мб код, 64 Кб данные

compact 64 Кб код, 1Мб данные

large 1Мб код, 1Мб данные

huge тоже что large, но размер статических данных может превышать 64 Кб.

В huge для статистических данных выделяют более 1 сегмента.

int far array [30000]; //массив создается в новом сегменте данных

char far a [70000]; // ошибка более 64кб.

char huge b[70000]; // верно.

 

Для совместной компляции нескольких модулей создается файл-проект. Проект создается через пункт меню Project - проект, где указываются все компилируемые файлы. Для этого используется подпункт меню:

Open Project -> Insert - добавить модуль

Delete - удалить модуль