Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 21:32   #1
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию массив 150 Kb дод DOS ?

Приветсвую!

Кто нибудьрешал задачу создания одномерного массива char 150 КБ? Причём всё это требуется под управлением MS-DOS.

Я уже знаю: нельзя создать одномерный массив больше 64 КБ (длина сегмента), поэтому единственный способ - это создать динамический массив при помощи функции new или farcalloc. Для моих целей подойдёт и двухмерный массив размером char 320 * 320. Пытаюсь создать его так:

Код:
char **m1;
   
  m1 = (char **) farcalloc(320, sizeof(char *));

  for(peri_1 = 0; peri_1 < 320; peri_1 += 1)
       m1[peri_1] = (char *) farcalloc(320, sizeof (char));
В результате работы данной программы выделяется только 57138 байт, а дальше никак. Использую модель памяти huge. Однако ничего не получается. Пробовал char far, тот же эффект. C оператором new то же самое.

Под DOS_ом ведь 640 Kb доступно, за минусом памяти требуемой для работы borland c 3.1 всёравно должно оставаться достаточно. Я уже давно понял, если программа не работает, значит это не с ней что то нетак, а я чегото непонимаю. Прошу поделиться опытом по данному вопросу, если кто сталкивался.
somwan вне форума Ответить с цитированием
Старый 24.11.2011, 21:54   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

somwan

1. объявляй указатель явно как huge
2. попробуй заюзать halloc
3. в зависимости от наличия в системе драйверов himem.sys / emm386.exe можно использовать xms/ems память
4. (самый правильный вариант) выкинуть поделие борланда нах, взять watcom c++, работающий в защищенном режиме под экстендер dos4/gw и радоваться.
Rififi вне форума Ответить с цитированием
Старый 24.11.2011, 22:13   #3
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию

Huge суть дела не изменило. вместо первичного указанного количество выделенно 58422 байта (на 1284 байта больше ) функции halloc в борланде 3.1 нет. Менять компилятор пугает! Т.к. этот я уже довольно хорошо знаю, и в самый разгар проэкра тоже не очень приятно. Пытяюсь дальше. Уже выяснил, что в системе свободно 320 Кб. (с копейками) рсталось только найти способ их использования в своих интересах.
somwan вне форума Ответить с цитированием
Старый 24.11.2011, 22:46   #4
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию

Поздравте меня, всёж я разобрался! Прблема не в способе выделения , а в том, что я запускал программу из под borland c 3.1 (т.е. run>>run). В голову пришла светлая мысль я закрыл BC и запустил созданную там программу из под доса. Всё прекрасно работает! Даже без huge. Выделяет МНОГО, больее чем достаточно. (620 Кб. больше не пробовал) Всем спасибо.
somwan вне форума Ответить с цитированием
Старый 25.11.2011, 14:37   #5
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от somwan Посмотреть сообщение
Поздравте меня, всёж я разобрался! Прблема не в способе выделения , а в том, что я запускал программу из под borland c 3.1 (т.е. run>>run). В голову пришла светлая мысль я закрыл BC и запустил созданную там программу из под доса. Всё прекрасно работает! Даже без huge. Выделяет МНОГО, больее чем достаточно. (620 Кб. больше не пробовал) Всем спасибо.
Дело в том, что все равно адресация памяти в реальном режиме ограничена 16 битовым регистром. То есть вам нужен будет механизм по переустановке сегментного регистра при обращении к адресам, которые превышают стандартный размер сегмента. Даже если вы пользуетесь EMM, вам все равно нужно будет самому имитировать механизм виртуальной памяти. То есть вам нужно будет выделить "окошко" размером с сегмент и туда "подгружать данные" по мере их востребованности.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
софт с авторизацией данных. 150$ 8check Фриланс 14 16.06.2010 02:36
Разработать программу для заполнения типизированного файла целыми числами в интервале [-150; 150]. Поменя Pan_rust Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2010 23:03