Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 108
от 18.05.2005, 23:40

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 2


Вопрос № 20831: Доступная память компилятору Borland C++ for DOS 64 Kbytes. Возможно ли выделить больше? Если да, то каком способом?...

Вопрос № 20831
Доступная память компилятору Borland C++ for DOS 64 Kbytes. Возможно ли выделить больше? Если да, то каком способом?
Отправлен: 13.05.2005, 23:35
Вопрос задал: MikeR (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Jadd
Здравствуйте, MikeR!
Это не совсем так, как вы описываете. Существуют разные модели памяти и связанные с ними типы указателей. Коротко перечислю и опишу их и их особенности. Как вы знаете, физический адрес формируется парой сегмент-смещение. При формировании физического адреса в качестве его сегментной част процессор использует значения, которые находятся в сегментных регистрах CD, DS, SS, ES. Максимальный размер сегмента - 64К. Та часть программы, которая адресуется без изменения значения в сегментном регистре, называется сегментом программы. Если явное переопределение сегментов не происходит в программе, сегментные регистры юзаются следующим образом:1) значение в CS - при формировании адреса следующей комманды (CS:IP). Значениев CS меняется только при использовании FAR вызовов, FAR безусловных передач, FAR возвратов, инструкций програмных прерываний. 2) значение в DS - для формирования физического адреса данных, учавствующих в выполняемой процессором операции. 3)значение в ES - для формирования адреса данных вместо значения в DS при переопределении сегментной части адреса данных или при выполнении комманд переноса данных из одной области памяти в другую (цепочечные примитивы). 4) значение в SS для доступа к стеку. Так вот. Для чего я это все пишу. Все эти моменты ВАЖНЫ для понимания указателей, вернее их форм. В зависимости от потребностей программы указатели бывают near и far. Near указатель задает только смещение объекта адреса, т.е. смещение относительно начала сегмента. В качестве сегментной части адреса объекта используется текущее значение регистра DS. Поэтому такие указатели занимают в памяти 2 байта и могу адресовать не более 64К. Far указатели задает полный адрес, т.е. сегмент:смещение и занимает 4 байта. Он позволяет адресовать любой байт в адресном пространстве. При доступе к объекту данных по значению указателя сегмент адреса помещается в сегментный регистр, как правилов ES. А частным случаем far-указателя является huge-указатель. Теперь главное. Испол ьзуемая форма указателя может задаваться либо явно, либо неявно (т.е. по дефолту). Форму указателя по дефолту определяет выбранная модель памяти:TINY, SMALL, MEDIUM, COMPACT, LARGE и HUGE. Для моделей TINY, SMALL и medium дефолтовые указатели - near. Для моделей COMPACT, LARGE и HUGE - far-указатели. Т.е. в Вашем случае нужно в опциях компилятора выставить иную модель памяти, чтобы программа могла адресовать большие объемы памяти или явно задавать тип указателей на far или huge. Кстати, более подробное описание моделей памяти есть в хелпе к BC++. Надеюсь, что не утомил подробностями, но тут важно фундаментальное понимание проблемы. Удачи.
Ответ отправил: Jadd (статус: 3-ий класс)
Отправлен: 14.05.2005, 11:03
Оценка за ответ: 5

Отвечает: DSota
Здравствуйте, MikeR!
Jadd уже все рассказал про теорию, добавлять тут нечего... Это только теории много, а используется все это очень просто:

Приложение:

Ответ отправил: DSota (статус: Студент)
Отправлен: 16.05.2005, 09:23
Оценка за ответ: 4


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться

В избранное