Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выделение памяти для DOS изпод w2000 ("Out of memory")  (Прочитано 27558 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
proh
Гость
« : 25-07-2008 06:21 » 

Похожий вопрос уже поднимался, но решение, в моем случае, не подходящее. Вынужден повториться.
Хронология следующая:
Проект требуется собрать исключительно силами Borland C++ 3.1 .
В проекте участвует, помимо прочего, файл .prj и .ASM . Далее, BAT-иком собирается проект и дополнительных действий не требуется.
Так вот, всё шло хорошо пока .asm не распух до 168kb (при 103kb ошибка отсутствовала).При компиляции, в момент трансфера asm->obj выдается ошибка со следующим комментарием
Код:
Transfer to program: Turbo Assembler /MX /ZN /O ALGORITM.ASM,ALGORITM.OBJ:
Transfer  1: Out of memory
Понятно что дело в tasm и решил посмотреть его отдельно командной строкой через Borland C++ 3.1 -> File->DOS shell - получил более подробный результат
Код:
>tasm /MX /ZN /O ALGORITM.ASM,ALGORITM.OBJ
Turbo Assembler  Version 3.1  Copyright (c) 1988, 1992 Borland International
Assembling file:   ALGORITM.ASM
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  3232 bytes
**Fatal** Out of memory
При этом, если повторить процедуру из "чистой" командной строки, а не изпод Borland->DOS shell то всё работает отлично
Код:
tasm /MX /ZN /O ALGORITM.ASM,ALGORITM.OBJ
Turbo Assembler  Version 3.1  Copyright (c) 1988, 1992 Borland International
Assembling file:   ALGORITM.ASM
Error messages:    None
Warning messages:  None
Passes:            1
Remaining memory:  51616 bytes
Напрашивается вывод, что Borland не достаточно выделяет памяти под tasm, либо самой системой ограничена память для Borland-а.
А т.к. и то и другое работает в среде DOS то, скорее всего, тут и надо искать проблему (по моему мнению). Эту же мысль подтвердило и то что для чистоты эксперимента, я целеком перенес весь мой проект и Borland на другую машину и он там собрался сразу же без ошибок.
Так и возник вопрос - как заставить систему выделить память под DOS приложения?
Что-то слышал про PIF-ы, AUTOEXEC.NT и CONFIG.NT - но как с ними работать - в абривиатурах ума не дал.
PS
Добавлю, что похожих проектов достаточно много и приходят они поставщиком оборудования вместе с ихними доморощенными библиотеками, а потому игнорировать .prj или перейти на другой компилятор не получается.
В настройках Borland в Transfer->~Turbo Assembler прописаны \BC\BIN\TASM и /MX /ZN /O $TASM .
Система - w2000.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 25-07-2008 14:02 » 

proh, w2k не дружественна по отношению к DOS - может тут загвоздка.
Вообще, himem и emm386 в этом DOS-е загружены?

И еще вопрос: зачем такой громадный текстовик? Не лучше ли его порезать на части?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 25-07-2008 14:06 » 

что значит DOS под w2k? В смысле собирается под w2k, а работать должна под DOS? Зачем такое надо?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 25-07-2008 14:08 » 

Джон, дык, стоит w2k, под ней запускается досовская программа BC++ 3.1 и в ней выполняется компиляция проекта.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 25-07-2008 14:44 » 

Афигеть! Чего только не бывает. Я бы уже давно ДОС поставил и делал бы всё в ней.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
proh
Гость
« Ответ #5 : 26-07-2008 04:02 » 

Конечно же вы правы - проблему можно решить несколькими путями:
1)разбить .asm на части
2)трансфернуть .asm->.obj в отдельной командной строке и подсунуть результат в Борланд
и т.п.
Эти методы работают и используются, но занимают несколько большее время (рутиного) нежели мы привыкли работая через батник - от того и хотелось бы заставить работать класический метод сборки проектов.
И как я уже говорил, проект поставляется поставщиком оборудованием и это накладывает некоторые трудности на его модернизацию.
Но я хочу заострить внимание, что на соседней машине, (правдо под ХР) проект собирается без ошибок. Из этого делаю вывод, что посредством настройки системы на нижнем уровне можно победить этот вопрос.
Записан
proh
Гость
« Ответ #6 : 26-07-2008 05:21 » 

proh, w2k не дружественна по отношению к DOS - может тут загвоздка.
Вообще, himem и emm386 в этом DOS-е загружены?
в этих тонкостях я слаб, но на сколько я понимаю himem загружается , а вот emm386 - в w2к отсутствует
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 26-07-2008 07:15 » 

proh, Во всех языках высокого уровня стандартный метод, это разбивка проекта на логические части. Кстати это настоятельно рекомендуют. Что этим достигается:
1) Если часть откомпилирована, то ее повторно не нужно компилировать. Компилируются только те части, в которых были изменения. И потом только останется собрать (линковать проект в целом)
2) Каждая часть как правило оформляется как черный яшик. У нее есть свой внешний функционал. Часть по нимуму зависит от внешнего мира.

В мире GCC есть пакет automake. Путем прописывания правил компиляции, можно настроить порядок компилирования и сборки. После прописки правил компиляции, все изменения отслеживаются автоматически. Также примерно происходит и в других компиляторах.

Цитата
в этих тонкостях я слаб, но на сколько я понимаю himem загружается , а вот emm386 - в w2к отсутствует
Это одно и тоже, только в разном соусе. Если у тебя стоит himem, то надо просто его настроить правильно.
« Последнее редактирование: 26-07-2008 07:17 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
proh
Гость
« Ответ #8 : 26-07-2008 07:35 » 

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

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 26-07-2008 08:12 » 

Настройки config.sys:

Код:
Dos=high,umb
device=c:\windows\system32\himem.sys

Драйвера типа emm386 отсутствуют в линейке NT.

Для более полноценного DOS-а лучше использовать эмулятор. Например, DosBox.
« Последнее редактирование: 26-07-2008 08:15 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 02-08-2008 04:28 » 

Проблема в том, что программы DOS работают в 640 Кб памяти. Когда запускается shell из Borland C++, сама IDE остаётся в памяти и добавляется ещё command.com - в результате на tasm остаётся очень мало. При запуске tasm не из IDE свободной памяти больше, поэтому сборка проходит успешно.

Для максимальной разгрузки памяти рекомендуется посмотреть файлы config.nt и autoexec.nt вроде бы в папке system32 - они эквивалентны config.sys и autoexec.bat старого DOS и используются виндовым эмулятором. Из них поудалять лишних резидентов и добавить то, что написал RXL.

P.S. Для вывода информации о текущем состоянии памяти в DOS есть системная программа mem.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
proh
Гость
« Ответ #11 : 02-08-2008 05:09 » 

dimka, боюсь что сама истина где-то рядом, ибо находил несколько форумов по возникшему вопросу - болезнь с выделением памяти, действительно, известная, и решения мною не обноружено, а жаль - может плохо искал.
dimka, RXL, Согласен с предложениями, но этого оказалось не достаточно. config.nt и autoexec.nt я просмотрел, и МЕМ отличная команда для анализа - himem загружается, всё записано грузиться в верхнюю память, но по факту грузится не целиком в верхнюю, а частично и, потому, памяти остаётся порядка 550к + в верхней ~51к, а этого похоже не достаточно.. вот бы ещё файл подкачки организовать)). Хотя при этом на ХР (у меня w2k), практически с такими же показателями памяти, проблема не возникла - подозреваю, что вопрос в паре килобайтов которые на ХР чудом выделяются под задачу.
С эмуляторами никогда не работал, но возможно придется и познакомится.
К сожалению не обнаружил и приема для коррекции файла .prj через командную строку, чтобы память не грузить лишним(файл всегда разный и потому подмена готовым не подходит).
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 02-08-2008 05:44 » 

proh, подобная проблема широко была распространена во времена Win9x. Только решалась она загрузкой чистого DOS, а не из-под винды. Винда все равно скушает что-то.

Читай повнимательнее!
При запуске tasm не из IDE свободной памяти больше, поэтому сборка проходит успешно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
proh
Гость
« Ответ #13 : 02-08-2008 08:54 » 

Читай повнимательнее!
При запуске tasm не из IDE свободной памяти больше, поэтому сборка проходит успешно.
Может я чего не понял, виноват, но я вроде бы и сразу был не против того, что бы ВС не грузить в память, и именно для этой цели упомянул, что не против найти способ коррекции файла .prj из командной строки. Ибо если tasm запустить предварительно, то .prj придется корректировать ручками выбрасывая из него .asm и прописывая .obj и всё это через оболочку ВС.
« Последнее редактирование: 02-08-2008 08:56 от proh » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 02-08-2008 09:22 » 

proh, BC при сборке разве не проверяет дату создания у объектных файлов? Обычно, если дата объектника, исходника и файлов-завимостей не раньше даты файла проекта, то пересбока не выполняется. Проверь этот момент.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
proh
Гость
« Ответ #15 : 02-08-2008 11:43 » 

Зависимость не наблюдается. Сейчас мы только так и делаем (вынуждены) - tasm .asm->.obj , prj->BC , а там уже ручкамы корректируем список (удаляем .asm и добавляем .obj ) соответсвенно объектники новые - работает, но получается утомительно

Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 02-08-2008 15:31 » 

Вариант: написать bat-файл, в котором будут все необходимые команды сборки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
proh
Гость
« Ответ #17 : 03-08-2008 02:28 » 

Согласен, но вот только камунда такая не найдена, которая бы дала задание для ВС /ВСС не просто загрузить и выполнить .prj (от которого не избавиться), а загрузить -> откорректировать список файлов проекта->выполнить компиляцию.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 03-08-2008 09:18 » new

proh, а лог выполнения BC не ведет? Я просто с такой древностью не работал...

Вообще, ничего не мешает самому посмотреть опции tasm и tlink и самостоятельно написать сборку. Я с ассемблером только так и работал.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 03-08-2008 11:21 » 

proh, почему один раз не сохранить PRJ-файл с OBJ-файлами? Зачем каждый раз выполнять замену вручную?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
proh
Гость
« Ответ #20 : 03-08-2008 12:11 » 

RXL, честно говоря я так не работал и потому дело новое, но можно попробовать овладеть и этой наукой, вот только я опять сомневаюсь, что смогу вытащить информацию из пресловутого .prj .
dimka, -мы сразу задались этим вопросом "кому мы насолили?", беда в том что .prj постоянно меняется, и меняем его не мы - поставляется он с оборудованием. Но зато точно известно, что внутри него обязательно будет .asm .. ну а дальше понятно.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 03-08-2008 12:41 » 

proh, prj тут, думаю, даже не нужен.
Какие у тебя файлы есть в проекте, кроме asm?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
proh
Гость
« Ответ #22 : 04-08-2008 14:04 » 

RXL, это, конечно, было бы здОрово, но я уже немного говорил об самой ситуации - файлов много (.срр, .lib, .asm). Ну и собственно .prj который из всего разнообразия выбирает только те которые нужны для конкретного случая (проект уникален под конкретное оборудование) при этом самих файлов в папке проекта заведомо больше чем нужно (тут и отладчики, и какие-то имитаторы да и просто сырые наработки которые по уму и не нужно было бы тут оставлять, но уж как поставляется так и приходится использовать)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines