|
Предел сегмента данных в 64K
Из раскопок:
- В: Может ли Borland Pascal использовать статические переменные с размером
более чем 64 килобайта?
- О: Нет!
- В: Вы говорите *статические* переменные. Неужели есть что-то еще, с чем
можно работать?
- О: Да, смотри ниже одно из решений проблемы. Можете не тратить время на
чтение следующего текста, все равно это не работает, можете смело скроллировать
вниз.
- В: Поможет разделение большого массива на несколько маленьких (все элементы
меньше чем 64k, но в сумме больше чем 64k)?
- О: Нет!
- В: Поможет объявление нескольких переменных в модуле?
- О: Нет!
- В: Поможет объявление чего-либо в секции реализации модуля?
- О: Нет!
- В: Поможет использование защищенного режима Borland Pascal 7?
- A: Нет!
- В: Вы уверены??
- О: Да!!
- В: Почему??
- О: Во-первых, все программы, созданные на Borland Pascal, для любых
переменных используют только один сегмент данных, во-вторых, процессоры Intel
80xxx ограничивают размер сегмена 64 килобайтами.
- В: Это глупо!!
- О: Скажите это Borland!! (Или Intel, ...или обоим).
- В: Есть ли выход из тупика?
- О: Да! Возможны два решения:
1) не используйте *СТАТИЧЕСКИЕ* переменные для хранения данных большого
размера. В итоге это позволит разместить более чем 64k данных, но весь массив
данных в 64k не поместится, таким образом вы его поделите на несколько частей,
что не является решением проблемы. Сделайте переменные динамическими.
2) используйте другой компилятор: есть несколько доступных компиляторов языка
Pascal, которые более-менее Borland-совместимые и не имеют таких ограничений
(они 32-битные).
- В: Почему Borland Pascal не имеет 32-битного компилятора?
- О: Да, он весьма древний. Сообщите Borland, что вы хотите новую версию.
- В: Что такое не-статическая память?
- О: Для примера Куча, XMS, EMS, ... Куча доступна непосредственно, для XMS
необходим драйвер (himem.sys), для EMS тоже (HIMEM.SYS + EMM386.EXE) и он обычно
доступен не на всех компьютерах, так что лучше использовать XMS вместо EMS.
- В: Что такое Куча?
- О: Куча - вся свободная память ниже 640-килобайтной границы в режиме
реального времени, в защищенном режиме (доступном только в Borland Pascal 7) -
вся свободная память ниже 16-мегабайт (обычно *ВСЯ* свободная память, но мы
здесь говорим о Borland Pascal).
- В: Каким образом можно воспользоваться Кучей?
- О: Доступ к памяти Кучи возможен только с помощью указателей. Посмотрите на
этот пример, вы можете использовать эту технологию в ваших программах:
|
|
type
arr = array [1..30000] of longint; { это ваши
данные }
arrptr = ^arr; { это
указатель на данные }
var
data : arrptr; { это переменная,
содержащая указатель }
begin
if memavail < sizeof(arr) then halt; { проверяем наличие доступной памяти }
new (data); {
распределяем память }
for i := 1 to 30000 do data^[i]:=0; { используем ее, обратите здесь внимание на символ ^ !!
}
dispose (data); {
освобождаем память }
end. |
Примечание: данные можно описать и таким способом:
|
|
var
data : array [1..10000] of arrptr;
|
- В: Есть ли недостатки у данного решения?
- О: Да! Это медленно и немного опасно.
- В: Опасность заключается в использовании Кучи?
- О: Да!
Всегда распределяйте память Кучи прежде, чем вы решитесь ее использовать. В
противном случае вы можете получить одну из следующих ошибок системы: при
использовании программ, разработанных на C - "General Protection Violation"
(Общее нарушение защиты), разработанных с использованием других инструментов и
языков - "Protected Mode Exception #13" (Исключительная ситуация защищенного
режима) или иные. В режиме реального времени программа обычно не вызывает такую
ошибку, она просто молча перезапишет другие данные, или то, что попадется под
руку - саму себя, другие программы, DOS, все, что может оказаться в
памяти. Это может повлечь за собой все что угодно, вплоть до холодной
перезагрузки с выключением PC от сети, но может и не иметь никакого эффекта. В
особо крайнем случае возможна перезапись данных на жестком диске. Но это в
теории и вряд ли возможно.
- В: Как я могу использовать XMS память?
- О: По адресу http://www.brain.uni-freiburg.de/~klaus/pascal/sources/
расположен модуль, который позволяет использовать XMS.
- В: Как насчет других компиляторов Pascal?
- О: Проверьте FPK-Pascal и GNU-Pascal. Они оба являются свободно
распространяемыми 32-битными компиляторами Pascal для DOS и более-менее
Borland-совместимые. Если вам необходим компилятор Pascal для Linux или OS/2, то
два вышеупомянутых компилятора доступны также и для этих операционных систем,
плюс некоторые другие, смотри http://www.brain.uni-freiburg.de/~klaus/pascal/web-list.html.
- В: Это звучит так, будто автор не любит Borland Pascal, не правда ли?
- О: Неправда, я *люблю* их и пользуюсь ими все время, но я *не люблю*, когда
Borland не предлагает их новые версии.
- В: Как насчет Delphi?
- О: Не доступен для DOS,
Не доступен для Linux, Не доступен для
OS/2.
|
Категория: Pascal | Добавил: DelphiAiX (09.05.2012)
|
Просмотров: 577
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
|