Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / память в dos / 25 сообщений из 42, страница 1 из 2
12.03.2006, 19:16
    #33595113
plut_snz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
Всем привет! Не могу выделить большой объем память в DOS (пару Mb под массив чисел). Кто сталкивался с продобной проблемой, поделитесь пожалуйста опытом, буду очень признателен. Компилятор Borland C++ 3.1. Работа в чистой DOS. Заранее спасибо.
...
Рейтинг: 0 / 0
12.03.2006, 19:18
    #33595117
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
вообще-то память в DOS ограничена 640 Кбайтами, включая расходы на ОС и твою программу.
...
Рейтинг: 0 / 0
12.03.2006, 19:20
    #33595118
plut_snz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
И ничего нельзя поделать?
...
Рейтинг: 0 / 0
12.03.2006, 19:24
    #33595125
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzИ ничего нельзя поделать?
если действительно "Работа в чистой DOS", то ничего.

если установлены хоть какие-то драйвера раширенной памяти, то поищи про Expanded memory или Extended memory (не помню какое точно, вечно путаю эти два названия), про EMM386.EXE (собственно, он и есть драйвер раширенной памяти в MS DOS)
...
Рейтинг: 0 / 0
12.03.2006, 19:26
    #33595129
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
Можно почитать в инете про DOS Extender - ы
А используется чистый дос или дос-окно под Windows?
...
Рейтинг: 0 / 0
12.03.2006, 23:56
    #33595304
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
Я доооолго смеялся ....
...
Рейтинг: 0 / 0
13.03.2006, 15:41
    #33597113
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzВсем привет! Не могу выделить большой объем память в DOS (пару Mb под массив чисел). Кто сталкивался с продобной проблемой, поделитесь пожалуйста опытом, буду очень признателен. Компилятор Borland C++ 3.1. Работа в чистой DOS. Заранее спасибо.


под досом, в реал моде мона только заюзать 640 кБайт + 64 кБайт - 16 байт (последнии две цифры, если разрешить A20)...
если перевести комп в протэкшен моде - то мона уже усю, что есть...

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

с уважением
(круглый)
ЗЫ
Вот они - дети форточек :)
...
Рейтинг: 0 / 0
13.03.2006, 16:26
    #33597285
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
даже печальнее - с помощью malloc() можно будет выделить не более 64Kb - ибо таков размер сегмента в DOS. То есть даже заветные 640 Kb не получить одним куском - а придется делать несколько сегментов память и переключать регистр DS на них.

Это насколько я помню из DOS :-) Может уже забыл чего.
...
Рейтинг: 0 / 0
13.03.2006, 16:42
    #33597358
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
--null--даже печальнее - с помощью malloc() можно будет выделить не более 64Kb - ибо таков размер сегмента в DOS. То есть даже заветные 640 Kb не получить одним куском - а придется делать несколько сегментов память и переключать регистр DS на них.

Это насколько я помню из DOS :-) Может уже забыл чего.


смотрим дос внимательней...
при загрузке то го же самого COMа - вся память начиная с PSP отдаёться текущему процессу.... И Вам никто не мешает вовремя переставлять верхнюю тэтраду адреса в сегменте адресации... 640 тем не менее - Вы правы, вряд ли мона заюзать... А вот почти 600 - без вопросов....Правда оттюнить придётся дос достаточно плотно...

с уважением
(круглый)
ЗЫ
Мона сделать просче...
Написать на фортране например... заказать в его подпрограмме 4 мерный (к примеру) массив неизвестной длины... Вызвать эту подпрограмму с числом 500 млн. (к примеру)...Компильнуться...Запустить прогу(название ужо забыл - сорьки) сжатия бинарника...получить с гулькин хрен бинарник... Запустить под досом и радоваться обработки фортраном памяти в 2 ГГб...
...
Рейтинг: 0 / 0
13.03.2006, 16:51
    #33597401
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
я давно уже с дос не общался, к сожалению, может забыл что-то.

но ведь грубо говоря malloc() на 120 Kb скажем втупую сделать нельзя?
Память, конечно, отдается процессу - но сегментную адресацию придется преодолевать вручную -

автор И Вам никто не мешает вовремя переставлять верхнюю тэтраду адреса в сегменте адресации

то есть играть с адресами
...
Рейтинг: 0 / 0
13.03.2006, 17:18
    #33597518
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
--null--...то есть играть с адресами

а шо там играть то !...

вся память...

0FFFFFh

из них "нижнии" 640 - это всего то, до адресса

0A0000h

любой регистр x86 в реал моде 16 разрядный... реальный адресс получаеться путём сложения сегмента и регистра адресации со сдвигом в 4 бита... То бишь Вам никто не мешает работать спокойно в цикле с одним сегментом... и при окончании счётчика - прально выбирать следующий сегмент...сей код на азме - два пальца об асфальт...

а вообще то, если уже более серьёзно - то время ОБРАБАТЫВАЕМЫХ данных ДОЛЖНО быть СОИЗМЕРИМО с временем ПЕРЕДАЧИ(сохранения) этих самих данных... Всё остальное - от лукавого - будет проигрыш по времени ;)
За примерами - лучше к анализу индексных страниц (они всего 1, 2 кила), у того же самого формата DBF :)
...
Рейтинг: 0 / 0
13.03.2006, 17:20
    #33597530
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
угу, все верно
просто у меня было подозрение, что товарищ попытался сделать баальшой alloc() :-)
...
Рейтинг: 0 / 0
13.03.2006, 21:46
    #33598045
plut_snz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
Всем спасибо!
Дело в том, что я, можно сказать новичок в программировании, и не дорос еще до того, чтобы играть с адресами, тем более на асме =)! В результате нескольких часов мучений понял, что больше 64kb одним куском ни маллоками, ни аллоками, ни чем другим выделить не получается =((по крайней мере у меня). Хоть какой-то выход нашелся путем определения нескольких кусков по 64kb (возможно это и является "переключением регистров памяти", но через задний прход, увы, по-другому не умею). Но тем не менее свыше примерно 600кb не выходит =(. Неужели нет способа попроще, в виде готовой функции.
И еще маленький вопросик: как перевести машину в защищенный режим?
Еще раз всем огромное спасибо!
...
Рейтинг: 0 / 0
13.03.2006, 22:10
    #33598065
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzХоть какой-то выход нашелся путем определения нескольких кусков по 64kb
Это неправильный выход. Правильным будет выделить один кусок памяти и при необходимости подчитывать в него очередной кусок своего массива чисел.

plut_snzИ еще маленький вопросик: как перевести машину в защищенный режим?"Не получается палец уколотый перевязать, ну и фиг с ним, пойду проведу операцию на сердце" :)
...
Рейтинг: 0 / 0
13.03.2006, 22:27
    #33598083
plut_snz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
White Owl plut_snzХоть какой-то выход нашелся путем определения нескольких кусков по 64kb
Это неправильный выход. Правильным будет выделить один кусок памяти и при необходимости подчитывать в него очередной кусок своего массива чисел.

plut_snzИ еще маленький вопросик: как перевести машину в защищенный режим?"Не получается палец уколотый перевязать, ну и фиг с ним, пойду проведу операцию на сердце" :)

Про палец понял...

Но все-таки если я буду в один участок памяти почитывать массив чисел, то рано или поздно этот участок закончится, а времени на то, чтобы вывести данные в файл нет! Именно поэтому я и прош помочь. В справке по borland c++ 3.1 написано, что используюя farmalloc можно занять ВСЮ имеющуюся память. У меня не выходит больше 54 kb =(((
...
Рейтинг: 0 / 0
13.03.2006, 22:28
    #33598086
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
авторКомпилятор Borland C++ 3.1
Если мне память не изменяет - в Борланде есть DMPI (кажется) интерфейс, который позволяет работать с памятью в защищенном режиме - т е всю доступную память выше 1024К видно как линейный массив. Может и спутал чего - давно было
Это все а-ля DOS4GW (в смысле DMPI)
...
Рейтинг: 0 / 0
13.03.2006, 22:38
    #33598094
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
авторИ еще маленький вопросик: как перевести машину в защищенный режим?
оно конечно можно, но оно Вам надо? :-) придется слишком много прочитать про защищенный режим.
Проще уж не ручками, а с DOS-Extender-ом
И вообще - почему принципиален DOS?
Учебная задача с обязательным требованием DOS?
...
Рейтинг: 0 / 0
14.03.2006, 00:57
    #33598179
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzНо все-таки если я буду в один участок памяти почитывать массив чисел, то рано или поздно этот участок закончится, а времени на то, чтобы вывести данные в файл нет!Почему нет? При чем здесь время вообще? Прочитал, обработал, записал, повторить. Все просто как дважды-два.

plut_snzИменно поэтому я и прош помочь. В справке по borland c++ 3.1 написано, что используюя farmalloc можно занять ВСЮ имеющуюся память. У меня не выходит больше 54 kb =(((ээээ.... Ну да, в справке борланда есть заявление что мол farmalloc может выделять куски более 64К, но насколько это работает на практике... На запрос памяти ОС ищет первый свободный кусок не меньше запрошеного по объему и отдает его пользователю. Возможно что у тебя просто в тот момент была большая замусореность памяти.
В любом случае хапать большой кусок памяти на ОС без свопа непрактично.
...
Рейтинг: 0 / 0
14.03.2006, 01:03
    #33598182
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
landy авторКомпилятор Borland C++ 3.1
Если мне память не изменяет - в Борланде есть DMPI (кажется) интерфейс, который позволяет работать с памятью в защищенном режиме - т е всю доступную память выше 1024К видно как линейный массив. Может и спутал чего - давно было
Это все а-ля DOS4GW (в смысле DMPI)DOS4GW это WatcomC, лучший компилятор во времена 386-х :)
У борландов DPMI не было...
...
Рейтинг: 0 / 0
14.03.2006, 10:55
    #33598695
plut_snz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
DOS принципиален, т.к. с портами и прерываниями под Windows работать совсем не умею. (а надо =)). Задача не учебная. Требуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. С екстендерами пока не разбирался, решил сразу сюда написать, думал есть способ попроще, выходит нету...
...
Рейтинг: 0 / 0
14.03.2006, 11:14
    #33598770
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzТребуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот.
насколько высока частота выборок?

имхо, такое лучше сделать в две ступени:
1) машина-коллектор принимает данные и по мере накопления блоков данных отправляет их машине-серверу по сети или какому-то другому каналу. Это вполне может быть DOS-машина или даже недорогой промышленный контроллер.
2) машина-сервер принимает блоки с данными, если необходимо, то выполняет первичную обработку и записывает данные в файл или в БД.

т.е. я предлагаю поток данных из синхронного седлать асинхроным...
...
Рейтинг: 0 / 0
14.03.2006, 13:00
    #33599173
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
--null--даже печальнее - с помощью malloc() можно будет выделить не более 64Kb - ибо таков размер сегмента в DOS. То есть даже заветные 640 Kb не получить одним куском - а придется делать несколько сегментов память и переключать регистр DS на них.


Йесть мудель памити HUGE (она же Хуго, ни путать с Хуга Бозз).
Ана можит и мигабайт выдилить в адин массиф.
Многия кампилятары для ДОС иё паддерживали...
...
Рейтинг: 0 / 0
14.03.2006, 14:19
    #33599508
freebeer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzDOS принципиален, т.к. с портами и прерываниями под Windows работать совсем не умею. (а надо =)). Задача не учебная. Требуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. С екстендерами пока не разбирался, решил сразу сюда написать, думал есть способ попроще, выходит нету...
в BP 7.0 DPMI точно был.
IMHO, проще разобратся с портами и прерываниями Windows или Linux. эТИ знания, по крайней мере будут активно востребованны. Сложного там ничего нет.

Каким образом собираетесь вводить информацию с железки в компьютер?
...
Рейтинг: 0 / 0
14.03.2006, 15:25
    #33599762
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
plut_snzDOS принципиален, т.к. с портами и прерываниями под Windows работать совсем не умею. (а надо =)). Задача не учебная. Требуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. С екстендерами пока не разбирался, решил сразу сюда написать, думал есть способ попроще, выходит нету...

как тут уже сказали - Вам будет просче и практичней - переползти под форточки...
плюсы...
1) можно заюзать бОльшие мощности по обработки сигнала (имееться ввиду не железо, а программную часть и чужой опыт обработки сигналов под форточками).
2) мультизадачная среда...
3) азм в защищённом режиме более богатый и более продвинут в плане скорострельности выполнения (32, 64 битная орифметика и др.).
4) обретения опыта по драйверам под форточки..
минусы...
1) изучение написания драйверов..(в инете примеров - как грязи).
2) отладка драйвера (ну тут две машины Вам в помощь)...

кажись так...
с уважением
(круглый)
ЗЫ
На досе, если не существует других аспектов - не стоит... Слишком уж не в духе времени - может сильно сказаться на спрос конечного продукта, так же...
...
Рейтинг: 0 / 0
14.03.2006, 16:29
    #33599990
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
память в dos
В Win98 можно работать с железом практически так-же вольготно как в DOS
но ежели она уйдет в своп Не думали об QNX ?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / память в dos / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]