|
|
|
память в dos
|
|||
|---|---|---|---|
|
#18+
Всем привет! Не могу выделить большой объем память в DOS (пару Mb под массив чисел). Кто сталкивался с продобной проблемой, поделитесь пожалуйста опытом, буду очень признателен. Компилятор Borland C++ 3.1. Работа в чистой DOS. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 19:16 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
вообще-то память в DOS ограничена 640 Кбайтами, включая расходы на ОС и твою программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 19:18 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
И ничего нельзя поделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 19:20 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzИ ничего нельзя поделать? если действительно "Работа в чистой DOS", то ничего. если установлены хоть какие-то драйвера раширенной памяти, то поищи про Expanded memory или Extended memory (не помню какое точно, вечно путаю эти два названия), про EMM386.EXE (собственно, он и есть драйвер раширенной памяти в MS DOS) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 19:24 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
Можно почитать в инете про DOS Extender - ы А используется чистый дос или дос-окно под Windows? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 19:26 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
Я доооолго смеялся .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 23:56 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzВсем привет! Не могу выделить большой объем память в DOS (пару Mb под массив чисел). Кто сталкивался с продобной проблемой, поделитесь пожалуйста опытом, буду очень признателен. Компилятор Borland C++ 3.1. Работа в чистой DOS. Заранее спасибо. под досом, в реал моде мона только заюзать 640 кБайт + 64 кБайт - 16 байт (последнии две цифры, если разрешить A20)... если перевести комп в протэкшен моде - то мона уже усю, что есть... в принцепе мона использовать "любой" размер памяти и под досом (см. тот же самый фортран) - но это больше похоже на свопинг, нежели доступ к физической памяти более указанного выше размера... с уважением (круглый) ЗЫ Вот они - дети форточек :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 15:41 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
даже печальнее - с помощью malloc() можно будет выделить не более 64Kb - ибо таков размер сегмента в DOS. То есть даже заветные 640 Kb не получить одним куском - а придется делать несколько сегментов память и переключать регистр DS на них. Это насколько я помню из DOS :-) Может уже забыл чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 16:26 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
--null--даже печальнее - с помощью malloc() можно будет выделить не более 64Kb - ибо таков размер сегмента в DOS. То есть даже заветные 640 Kb не получить одним куском - а придется делать несколько сегментов память и переключать регистр DS на них. Это насколько я помню из DOS :-) Может уже забыл чего. смотрим дос внимательней... при загрузке то го же самого COMа - вся память начиная с PSP отдаёться текущему процессу.... И Вам никто не мешает вовремя переставлять верхнюю тэтраду адреса в сегменте адресации... 640 тем не менее - Вы правы, вряд ли мона заюзать... А вот почти 600 - без вопросов....Правда оттюнить придётся дос достаточно плотно... с уважением (круглый) ЗЫ Мона сделать просче... Написать на фортране например... заказать в его подпрограмме 4 мерный (к примеру) массив неизвестной длины... Вызвать эту подпрограмму с числом 500 млн. (к примеру)...Компильнуться...Запустить прогу(название ужо забыл - сорьки) сжатия бинарника...получить с гулькин хрен бинарник... Запустить под досом и радоваться обработки фортраном памяти в 2 ГГб... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 16:42 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
я давно уже с дос не общался, к сожалению, может забыл что-то. но ведь грубо говоря malloc() на 120 Kb скажем втупую сделать нельзя? Память, конечно, отдается процессу - но сегментную адресацию придется преодолевать вручную - автор И Вам никто не мешает вовремя переставлять верхнюю тэтраду адреса в сегменте адресации то есть играть с адресами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 16:51 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
--null--...то есть играть с адресами а шо там играть то !... вся память... 0FFFFFh из них "нижнии" 640 - это всего то, до адресса 0A0000h любой регистр x86 в реал моде 16 разрядный... реальный адресс получаеться путём сложения сегмента и регистра адресации со сдвигом в 4 бита... То бишь Вам никто не мешает работать спокойно в цикле с одним сегментом... и при окончании счётчика - прально выбирать следующий сегмент...сей код на азме - два пальца об асфальт... а вообще то, если уже более серьёзно - то время ОБРАБАТЫВАЕМЫХ данных ДОЛЖНО быть СОИЗМЕРИМО с временем ПЕРЕДАЧИ(сохранения) этих самих данных... Всё остальное - от лукавого - будет проигрыш по времени ;) За примерами - лучше к анализу индексных страниц (они всего 1, 2 кила), у того же самого формата DBF :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 17:18 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
угу, все верно просто у меня было подозрение, что товарищ попытался сделать баальшой alloc() :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 17:20 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
Всем спасибо! Дело в том, что я, можно сказать новичок в программировании, и не дорос еще до того, чтобы играть с адресами, тем более на асме =)! В результате нескольких часов мучений понял, что больше 64kb одним куском ни маллоками, ни аллоками, ни чем другим выделить не получается =((по крайней мере у меня). Хоть какой-то выход нашелся путем определения нескольких кусков по 64kb (возможно это и является "переключением регистров памяти", но через задний прход, увы, по-другому не умею). Но тем не менее свыше примерно 600кb не выходит =(. Неужели нет способа попроще, в виде готовой функции. И еще маленький вопросик: как перевести машину в защищенный режим? Еще раз всем огромное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 21:46 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzХоть какой-то выход нашелся путем определения нескольких кусков по 64kb Это неправильный выход. Правильным будет выделить один кусок памяти и при необходимости подчитывать в него очередной кусок своего массива чисел. plut_snzИ еще маленький вопросик: как перевести машину в защищенный режим?"Не получается палец уколотый перевязать, ну и фиг с ним, пойду проведу операцию на сердце" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 22:10 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
White Owl plut_snzХоть какой-то выход нашелся путем определения нескольких кусков по 64kb Это неправильный выход. Правильным будет выделить один кусок памяти и при необходимости подчитывать в него очередной кусок своего массива чисел. plut_snzИ еще маленький вопросик: как перевести машину в защищенный режим?"Не получается палец уколотый перевязать, ну и фиг с ним, пойду проведу операцию на сердце" :) Про палец понял... Но все-таки если я буду в один участок памяти почитывать массив чисел, то рано или поздно этот участок закончится, а времени на то, чтобы вывести данные в файл нет! Именно поэтому я и прош помочь. В справке по borland c++ 3.1 написано, что используюя farmalloc можно занять ВСЮ имеющуюся память. У меня не выходит больше 54 kb =((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 22:27 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
авторКомпилятор Borland C++ 3.1 Если мне память не изменяет - в Борланде есть DMPI (кажется) интерфейс, который позволяет работать с памятью в защищенном режиме - т е всю доступную память выше 1024К видно как линейный массив. Может и спутал чего - давно было Это все а-ля DOS4GW (в смысле DMPI) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 22:28 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
авторИ еще маленький вопросик: как перевести машину в защищенный режим? оно конечно можно, но оно Вам надо? :-) придется слишком много прочитать про защищенный режим. Проще уж не ручками, а с DOS-Extender-ом И вообще - почему принципиален DOS? Учебная задача с обязательным требованием DOS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 22:38 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzНо все-таки если я буду в один участок памяти почитывать массив чисел, то рано или поздно этот участок закончится, а времени на то, чтобы вывести данные в файл нет!Почему нет? При чем здесь время вообще? Прочитал, обработал, записал, повторить. Все просто как дважды-два. plut_snzИменно поэтому я и прош помочь. В справке по borland c++ 3.1 написано, что используюя farmalloc можно занять ВСЮ имеющуюся память. У меня не выходит больше 54 kb =(((ээээ.... Ну да, в справке борланда есть заявление что мол farmalloc может выделять куски более 64К, но насколько это работает на практике... На запрос памяти ОС ищет первый свободный кусок не меньше запрошеного по объему и отдает его пользователю. Возможно что у тебя просто в тот момент была большая замусореность памяти. В любом случае хапать большой кусок памяти на ОС без свопа непрактично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 00:57 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
landy авторКомпилятор Borland C++ 3.1 Если мне память не изменяет - в Борланде есть DMPI (кажется) интерфейс, который позволяет работать с памятью в защищенном режиме - т е всю доступную память выше 1024К видно как линейный массив. Может и спутал чего - давно было Это все а-ля DOS4GW (в смысле DMPI)DOS4GW это WatcomC, лучший компилятор во времена 386-х :) У борландов DPMI не было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 01:03 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
DOS принципиален, т.к. с портами и прерываниями под Windows работать совсем не умею. (а надо =)). Задача не учебная. Требуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. С екстендерами пока не разбирался, решил сразу сюда написать, думал есть способ попроще, выходит нету... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 10:55 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzТребуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. насколько высока частота выборок? имхо, такое лучше сделать в две ступени: 1) машина-коллектор принимает данные и по мере накопления блоков данных отправляет их машине-серверу по сети или какому-то другому каналу. Это вполне может быть DOS-машина или даже недорогой промышленный контроллер. 2) машина-сервер принимает блоки с данными, если необходимо, то выполняет первичную обработку и записывает данные в файл или в БД. т.е. я предлагаю поток данных из синхронного седлать асинхроным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 11:14 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
--null--даже печальнее - с помощью malloc() можно будет выделить не более 64Kb - ибо таков размер сегмента в DOS. То есть даже заветные 640 Kb не получить одним куском - а придется делать несколько сегментов память и переключать регистр DS на них. Йесть мудель памити HUGE (она же Хуго, ни путать с Хуга Бозз). Ана можит и мигабайт выдилить в адин массиф. Многия кампилятары для ДОС иё паддерживали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 13:00 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzDOS принципиален, т.к. с портами и прерываниями под Windows работать совсем не умею. (а надо =)). Задача не учебная. Требуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. С екстендерами пока не разбирался, решил сразу сюда написать, думал есть способ попроще, выходит нету... в BP 7.0 DPMI точно был. IMHO, проще разобратся с портами и прерываниями Windows или Linux. эТИ знания, по крайней мере будут активно востребованны. Сложного там ничего нет. Каким образом собираетесь вводить информацию с железки в компьютер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 14:19 |
|
||
|
память в dos
|
|||
|---|---|---|---|
|
#18+
plut_snzDOS принципиален, т.к. с портами и прерываниями под Windows работать совсем не умею. (а надо =)). Задача не учебная. Требуется считывать значения с одной железки, частота выборок должна быть высокой. Пробовал писАть в файл, получается фигово, т.е. пока пишу, пропускаю кучу значений, вот так вот. С екстендерами пока не разбирался, решил сразу сюда написать, думал есть способ попроще, выходит нету... как тут уже сказали - Вам будет просче и практичней - переползти под форточки... плюсы... 1) можно заюзать бОльшие мощности по обработки сигнала (имееться ввиду не железо, а программную часть и чужой опыт обработки сигналов под форточками). 2) мультизадачная среда... 3) азм в защищённом режиме более богатый и более продвинут в плане скорострельности выполнения (32, 64 битная орифметика и др.). 4) обретения опыта по драйверам под форточки.. минусы... 1) изучение написания драйверов..(в инете примеров - как грязи). 2) отладка драйвера (ну тут две машины Вам в помощь)... кажись так... с уважением (круглый) ЗЫ На досе, если не существует других аспектов - не стоит... Слишком уж не в духе времени - может сильно сказаться на спрос конечного продукта, так же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 15:25 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33598770&tid=2030831]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 525ms |

| 0 / 0 |
