Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структуры >64k, ...с++ под ДОС 
:(
    Опции темы
Zigmund
Дата 30.5.2002, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.4.2002

Репутация: нет
Всего: нет



Как организовать стукруры в С++ больше, чем 64к?

следующее дает NUL.

char *buf=(char *)farmalloc(70000);
PM MAIL   Вверх
Alex101
Дата 30.5.2002, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: нет
Всего: 10



Цитата(Zigmund @ 30.5.2002, 09:55)
Как организовать стукруры в С++ больше, чем 64к?

следующее дает NUL.

char *buf=(char *)farmalloc(70000);

А ежели char far *...?


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
suborg
Дата 30.5.2002, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.4.2002
Где: Москва

Репутация: нет
Всего: нет



Не рекомендую пользоваться для этого дела компиляторами типа Borland C 3.1
У него проблемы с памятью, а защищенный режим вообще не предусмотрен. А вот как раз с большими структурами чтобы работать неплохо бы в защищенном режиме сидеть, иметь доступ к XMS,EMS и т.п.
Попробуй взять GNU C++ (для ДОС он по-моему называется DJGPP) или Watcom C++.
PM MAIL WWW ICQ   Вверх
Zigmund
Дата 31.5.2002, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.4.2002

Репутация: нет
Всего: нет



Спасибо..

насчет far... никак до размера сегмента позволяет, а дальше ни-ни... :( Проверял на tc++1.01 и bc3.01...
PM MAIL   Вверх
Tommy
Дата 21.7.2002, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.7.2002

Репутация: нет
Всего: нет



Попробуй компилятору уразать модель памяти Huge. Там можно использовать структуры больше 64К.На счет Far  это всго лиши изменяет тип указателя увеличивая его  размер.
PM MAIL   Вверх
Lobsang
Дата 21.7.2002, 13:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помнится мне, говорили нам в институте, что больше 64 - фиг получится. Для преодоления этого ограничения заставляли учить всякие динамические структуры, типа списков, векторов.
  Вверх
crimaniak
Дата 21.7.2002, 19:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Читайте доки, они рулез.

Под досом бывает near *, far * и huge *. Flat модель и всякие экстендеры не рассматриваем.
near * состоит из одного смещения относительно сегмента данных, так что мы можем адресовать блок не более 64K в общем объеме не более 64K.
far * состоит из сегмента и смещения, так что мы можем адресовать не более 64К в объеме до 1М.
huge * состоит из сегмента и смещения, но В ОТЛИЧИЕ от far * при операциях с ним предусмотрена обработка переполнения, и он гарантированно нормализуется. Так что мы можем адресовать 1М в пределах 1М

Естественно, все вышеуказанные размеры - приблизительные, обычно они меньше. 64К - как минимум на параграф, 1M - больше на размер HMA. :)

Для получения большого блока данных мы либо можем откомпилироваться в huge модели, где все указатели у нас huge, либо просто явно написать тип указателя   char huge * buffer=(char huge*) farmalloc(...);

Все это прекрасно работало еще в Turbo-C 2.0, лучшем компиляторе С всех времен и народов. :)

Прикол: потребовалось однажды срочно обработать файлик текстовый, размером в пару гиг. В какие только я его редакторы и тулзы не совал - начиная от Microsoft World и кончая MultiEdit под дос. Ни одна имевшаяся в наличии программа не смогла его обработать, а в основном - даже открыть. В общем, нашлась случайно утилитка по поиску и замене, писанная мною в начале девяностых на Turbo-C. Была запущена ради прикола и.. вот он, результат. А ведь когда она писалась, таких объемов и представить нельзя было. Откуда вывод: не надо отключать ворнинги.
Господи, и кто сейчас этот софт пишет?  :sneaky2
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.