Помощь - Поиск - Пользователи - Календарь
Полная версия: Использование XMS памяти.
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Билли Боб
При работе в досе, в ТР с использованием модуля поддержки XMS, размер памяти равен нулю, а при выходе из TP и запуске скомпилированной программы память отображается верно. Как сделать, чтобы при работе в среде она была верной?
IUnknown
Какой модуль поддержки XMS используется?
Билли Боб
Отсюда взял

http://tpdn.ru/files/11/9226/
IUnknown
Хорошо. А теперь - еще несколько вопросов. Насколько я вижу из первого сообщения, ты работаешь под чистым DOS-ом? Используешь Турбо-Паскаль, скорее всего "семерку", да? Какой именно файл запускаешь, TURBO.EXE или TPX.EXE?

И еще:
Цитата
By default, the IDE uses all the extended memory reserved by the DPMI kernel.
и
Цитата
By default, the Turbo Pascal DPMI interface allocates all available extended and expanded memory for its own use. If you don't want all of the available memory to be taken by the DPMI kernel, you can set an environment variable to specify the maximum amount of memory to use. This variable can be entered directly at the DOS prompt or inserted as a line in your AUTOEXEC.BAT file, using this syntax:
SET DPMIMEM=MAXMEM nnnn
where nnnn is the amount of memory in kilobytes.

For example, if you have a system with 4MB and want the DPMI kernel to use 2MB of it, leaving the other 2MB alone, the DPMIMEM variable would be set as follows:
SET DPMIMEM=MAXMEM 2000
Обе цитаты - из "Turbo Pascal 7.0 User's Guide" от Борланда.

Билли Боб
да, да, TPX.

Цитата
By default, the IDE uses all the extended memory reserved by the DPMI kernel.

Вот в чем дело...

Решение:
Цитата
SET DPMIMEM=MAXMEM nnnn


Спасибо!
Билли Боб
А как можно поместить переменную сразу в XMS без использования основной памяти?
IUnknown
Цитата
Поместить переменную
или выделить место под данные? Ибо поместить переменную ты никуда не можешь, это может только компилятор.

А вообще, зачем тебе это извращение, расскажешь? Это потому, что реально не хватает памяти для работы программы, или просто так, поиграться? Если не хватает памяти - то есть другие пути решения проблемы, вообще-то, кроме использования XMS...

Если "поиграться" - то где-то на pascal.sources.ru валялся модуль, позволяющий организовать кучу в XMS; по-моему, там память выделялась сразу в XMS-блоке. Посмотри, как сделал автор, может это натолкнет на идею, или вообще модуль подойдет...
Билли Боб
Цитата
или выделить место под данные?

Именно так ).

нет, на самом деле не хватает! )
Но я уже разобрался, просто туда-сюда перекидывать показалось странным.

Цитата
есть другие пути решения проблемы, вообще-то, кроме использования XMS...

А я же не знал... А какие?

Цитата
там память выделялась сразу в XMS-блоке

о, класс, надо поискать
IUnknown
Цитата
А я же не знал... А какие?
Это индивидуально. Проверяются все типы данных, действительно ли нужны именно эти типы, возможно, они могут быт заменены на другие (скажем, Real совершенно безболезненно заменяется на Single, в результате размер массива из 100 вещественных чисел уменьшается на 200 байт). Со строками очень внимательным надо быть: забыл установить длину - получил по максимуму, 256 символов, хотя тебе, скажем, достаточно 80, или 127.

Если нужна помощь - присылай программу (volvo71@yandex.ru), попробую посмотреть, что можно еще сделать, чтобы сократить использование памяти...
TarasBer
Или, например, у тебя есть целое число, которе не может принимать значение больше 10000, и два булевых флага. Вместо того, чтобы отводить под них integer, boolean, boolean, тратя 4 байта, можно отвести только integer, и помнить, что его старшие два бита - это флаги, а в расчётах использовать только младшие 14 битов.
Так как Турбопас не поддерживает выделение определённого числа бит под поле в записи, то операции над такой структурой выглядят очень весело.
И это не шутка, я потом после перехода на винду долго отучивался подобным образом говнокодить.
Билли Боб
Цитата
Это индивидуально. Проверяются все типы данных, действительно ли нужны именно эти типы, возможно, они могут быт заменены на другие (скажем, Real совершенно безболезненно заменяется на Single, в результате размер массива из 100 вещественных чисел уменьшается на 200 байт). Со строками очень внимательным надо быть: забыл установить длину - получил по максимуму, 256 символов, хотя тебе, скажем, достаточно 80, или 127.

С этим у меня проблем пока не возникало, но если что, жди мои "супер-программы" ).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.