Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/56: Рейтинг темы: голосов - 56, средняя оценка - 4.79
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024

Что можно сделать если не хватает памяти?

23.03.2017, 10:35. Показов 12142. Ответов 81

Студворк — интернет-сервис помощи студентам
При компиляции программы в ВС3.1 MS-DOS через интерфейсное меню Compile (Alt+F9) выходит сообщение, что недостаточно оперативной памяти для компиляции и программа останавливается, каким образом можно добавить памяти через настройку среды борланд си, если компьютер имеет следующие параметры:
1. На компе одна ось FreeDos (не эмуляция через DosBox или виртуальную машину или еще как то)
2. Оперативной памяти на компе 4 гига
3. Программа mem.exe видит расширенную память и пишет Total memory free 3,5 гига
4. После запуска bc3.1 в меню Compile - informatiom выходят сообщения:
*Extended memory in use - 20 meg
*Expanded memory (EMS) - 20 meg
*Avialable memory - 20 meg
5. Код на с++ вместе с заголовочными файлами не более 300 килобайт

P.S. Я так понимаю, что у меня в настройках среды для выполнения программы используется только 20 мегабайт из доступных 3,5 гигабайт. (на компе других программ нет только эта) По идее, этих 20 мег должно бы хватить для компиляции 300 килобайт кода или я ошибаюсь? И позволяет ли борланд си 3.1 под досом настраивать больше доступной памяти чем 20 мегабайт и как это можно сделать, если можно?

И еще эта же сама я программа нормально компилируется через bcc.exe с параметрами и памяти для компиляции ей хватает, и ошибок не выдает, единственно что она использует при компиляции уже готовый объектный модуль.

Тогда вытекает еще второй вопрос, если в среде нельзя настроить подключения большей оперативки, может быть тогда запускать на компиляцию не программу *.cpp , а проект с этим самым готовым файлом *.obj В общем подскажите пожалуйста в какую сторону мне можно двигаться в данной ситуации?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2017, 10:35
Ответы с готовыми решениями:

Выводится сообщение о том, что не хватает памяти, хотя памяти хватает
Файлы подкачки отключил и включать не собираюсь. Когда свободной памяти остаётся примерно гиг-полтора начинают "помирать"...

Не хватает памяти, что делать?
У меня centos стоит на виртуальной машине. Мне нужно установить gcc на него, вон че выдает, я итак расширила комп до 516Мбайт

Стандарт. По УМОЛЧАНИЮ при дин. выделении, если не хватает памяти, вызывается NULL или bad_alloc?
По УМОЛЧАНИЮ при динамическом выделении, если не хватает памяти, возвращается NULL или bad_alloc? Так и не нашел конкретного ответа....

81
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.03.2017, 17:14
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от седьмой Посмотреть сообщение
Так вод в досе стабильность выше на порядок чем в линуксе оказалось на практике
Для начала стоит отметить, что Ubuntu != Linux
А если нужна стабильность рекомендую дистрибутив Debian. Он тоже deb-base, но в нём упор сделан на стабильность.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.03.2017, 17:20
Что понимается под стабильностью? Там какую-то особую синхронизацию нужно реализовать для COM-порта?
0
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
24.03.2017, 17:31  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
то зачем тебе вообще был нужен DOS? Делай для современных ОС.
нет там не все так просто, это длинная история, я на ферме в колхозе работаю, я уже задолбался отвечать в прошлых ветках, что и как и почему. Если коротко, то есть сторонняя организация которая внедрила некий проект на ферме типа АСУ ТП и нужно было добавить код чтения записи сигнала через серийный компорт на уровне аппаратного драйвера на ассеблере с большим быстродействие в несколько микросекунд, не знаю кто то влепил по ошибке или на самом деле это было нужно, я уж не стал вникать, в досе аппаратное прерывание работает очень быстро порядка 5 мкс, эта тема на форуме есть могу найти если интересно, я там и диаграммы сравнительные выкладывал и досе и в винде. Так вот под виндой я бы не смог написать аппаратный драйвер для сом порта за те сроки которые были установлены, поэтому писал на досе, ну и конечно не я сам, а помогли умные ребята на форуме, которых я тоже уже задолбал своими просьбами. Вот поэтому именно дос а не линуск и не винда. А сейчас мне нужно на этот комп еще платку поставить, вернее я ее уже поставил и код на с++ немного допилить, а точнее упростить, что бы в режиме отладки проверить что там и как работает, по тому как председателль нашего колхоза уже требует результат по всему этому допиливанию, а то все вроде работает в АСУ, а часть кода еще не функционирует. Ну в общем все очень запутано и мне хочется поскорее это доделать. сдать и забыть как кошмарный сон. Это надо же было догадаться использовать мс-дос после того как он 20 лет назад умер, знал бы что так все пойдет, сто раз подумал бы прежде чем в это вляпаться.

Добавлено через 5 минут
Цитата Сообщение от nmcf Посмотреть сообщение
Что понимается под стабильностью?
Да кто то в ТЗ вписал задержку в 20-100 мкс, как ее получить на линуксе и в винде, если там не может быть стабильность более чем 20 мс по определению. Вот пришлось городить огород с мс-дос. Был конечно очень умный человек на форуме

Не по теме:

тихо - тихо

, он писал аппаратные драйверы под виндой, но его с форума выгнали, как то на М у него был ник. Он вроде что то кому то сказал прямым текстом. Микки кажется. А к кому еще можно было с этим обратиться я не нашел. Поэтому исторически получился мс-дос.

Добавлено через 3 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
А если нужна стабильность рекомендую дистрибутив Debian.
Спасибо, я такое и не слышал, оно работает в реальном режиме времени? Посмотрю сейчас в инете.

Добавлено через 39 секунд
Цитата Сообщение от MrGluck Посмотреть сообщение
Для начала стоит отметить, что Ubuntu != Linux
Почему?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2017, 17:49
Цитата Сообщение от седьмой Посмотреть сообщение
Да кто то в ТЗ вписал задержку в 20-100 мкс, как ее получить на линуксе и в винде, если там не может быть стабильность более чем 20 мс по определению.
Если вам нужна только периферия, то наиболее реалистичным вариантом мне видится сделать программу ОС вообще не использующую. А потом загружать через grub или его аналог. Вот такое современным компилятором должно скомпилироваться. Правда, придется рыться в гайдах на тему "и как теперь все это запускать" (вот тут вроде бы есть примерчик). Сразу говорю, безосные программы писать не пробовал, так что это чистое теоретизирование.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.03.2017, 18:13
Цитата Сообщение от седьмой Посмотреть сообщение
я на ферме в колхозе работаю
Ферма, колхоз, ассемблер? Это где такое?
Цитата Сообщение от Renji Посмотреть сообщение
наиболее реалистичным вариантом мне видится сделать программу ОС вообще не использующую
А чем это от DOS-то отличается?

Надо драйвер делать, наверное.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2017, 18:15
Цитата Сообщение от nmcf Посмотреть сообщение
А чем это от DOS-то отличается?
Такой код как-то компилируют в современном gcc, а не допотопных BC. У ТС же, как я понял, проблема что не компилируется ничего.
0
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
24.03.2017, 18:24  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
так что это чистое теоретизирование
Нет это не подойдет, у меня на компе на этом есть платка с каким то расширение сомпорта, вот к ней я драйвер и пилю под досом. Так что пусть будет ФриДос , она бесплатная, с лицензией нет проблем, да и аппаратный драйвер на ассемблере уже в ней отлажен и стабильно работает . А идея ваша интересная надо на будущее почитать, спасибо. grub я кажется использовал на домашнем компе, когда делал меню выборки загрузки винды или убунту, я думал это функция линукса/убунты, а это значит что то промеежуточное между биосом и операционкой??? Но винт то ведь ей все равно нужен по идее? И потом в статье написано, что qemu еще нужна, пусть это и не операционка в чистом виде, но тоже какая то среда, и драйвера для платы расширения сом порта к ней нет у меня, так что это тоже мне не подходит. Наверно тему можно закрыть, кажется она исчерпалась. Спасибо огромное всем за помощь.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.03.2017, 18:28
qemu там используется как заменитель компьютера.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2017, 18:31
Цитата Сообщение от седьмой Посмотреть сообщение
grub я кажется использовал на домашнем компе, когда делал меню выборки загрузки винды или убунту, я думал это функция линукса/убунты, а это значит что то промеежуточное между биосом и операционкой??? Но винт то ведь ей все равно нужен по идее?
Grub это именно отдельная программа выполняющая базовую загрузку. Но да, винт с которого будет идти эта базовая загрузка ей нужен. Или флешка какая. Как еще более низкоуровневый вариант - кидать свой код в MBR. Правда, придется велосипедить подгрузку того, что в MBR не поместилось (туда только велосипед и помещается).
1
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
24.03.2017, 18:35  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
У ТС же, как я понял, проблема что не компилируется ничего.
Думаю теоретически должно компилироваться, разница я думаю небольшая, просто у разработчика в документации написано, что код надо компилировать через командную строку всс.ехе .....параметры....ххх.cpp yyy.obj (yyy.odj - я так понял что это готовый драйвер к плате для прерываний, а файл ххх.срр можно допиливать для себя. а файлик всс.ехе я нашел как раз в корне среды борланд си, вот и решил что мне нужен именно ВС а не ТС.

Добавлено через 2 минуты
Цитата Сообщение от Renji Посмотреть сообщение
Такой код как-то компилируют в современном gcc
да я тоже видел где то, но видимо проскочил, спасибо , посмотрю. Интересно с какой величиной оперативной памяти она может работать на ФриДосе?

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Ферма, колхоз, ассемблер? Это где такое?
Как где? Это Россия... Мяско едите, вот его в колхозе на ферме и выращивают.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2017, 18:42
Лучший ответ Сообщение было отмечено седьмой как решение

Решение

Цитата Сообщение от седьмой Посмотреть сообщение
ну у меня не совсем мс-дос, у меня ФриДос у него немного больше мощьности
Только вот borland'овский компилятор об этом не знает, а потому строит код под 16-битный DOS'овский режим
1
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
24.03.2017, 18:53  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Только вот borland'овский компилятор об этом не знает, а потому строит код под 16-битный DOS'овский режим
Вот!!!, вот это мне бы и хотелось понять, на компе 4 гига оперативки, борланд си видит только 20 мег, он на самом деле может использовать при компиляции всю эту оперативную память или нет? Или он может больше использовать? А то у меня при компиляции выходит ошибка что памяти не хватает, а на самом деле когда программа компилируется там же окно постоянно висит с указанием количества доступной памяти и там все 19 мег с чем то, а потом раз и выходит сообщение что памяти не хватило??? Это как можете пояснить?

Добавлено через 2 минуты
А gcc с большей памятью может работать? и работает ли он на ФриДос?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2017, 18:59
Цитата Сообщение от седьмой Посмотреть сообщение
Вот!!!, вот это мне бы и хотелось понять, на компе 4 гига оперативки, борланд си видит только 20 мег, он на самом деле может использовать при компиляции всю эту оперативную память или нет?
На самом деле древний код может "сойти с ума" при попытках современную память пересчитать (приключится арифметическое переполнение).
Не думаю что поможет, но взгромоздите этот свой фридос на VirtualBox с пятью мегабайтами оперативки и сотней мегабайт диска.

Добавлено через 56 секунд
Цитата Сообщение от седьмой Посмотреть сообщение
А gcc с большей памятью может работать? и работает ли он на ФриДос?
gcc может работать с большой памятью, но не под ФриДос. Компилируете код под Линуксом, а потом подсовываете во все ту же виртуалку для тестов.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2017, 19:28
Цитата Сообщение от седьмой Посмотреть сообщение
он на самом деле может использовать при компиляции всю эту оперативную память или нет?
Зависит от того, как он собран. На моей памяти старые компиляторы запускались на машинах, на которых было меньше мегабайта памяти. Т.е. сам компилятор вполне могу быть собран в режиме, коды которого заперты внутри одного мегабайта

Потом возникает второй этаж проблемы: а какой код генерирует компилятор. Вероятно, он должен уметь строить коды, которые используют protected mode и потребляют больше мегабайта памяти. Я уж навскидку вообще не помню о версиях компиляторов, так что даже не знаю, является ли 3.1 слишком старым для таких зада, или нет

Добавлено через 4 минуты
Хотя, если на руках есть бинарник компилятора, то по нему наверняка можно сказать, он в real-mode или нет
1
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
24.03.2017, 19:51  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
но взгромоздите этот свой фридос на VirtualBox с пятью мегабайтами оперативки и сотней мегабайт диска.
Не думаю что это хорошее предложение, виртуака не будет работать с железом, у меня драйвер под железо на ФриДосе, я не школьник с курсовым проектом, я колхозник программист.)))

Добавлено через 2 минуты
Цитата Сообщение от Renji Посмотреть сообщение
gcc может работать с большой памятью, но не под ФриДос..
а кто то в этой же теме писал, что вроде может работать...
Цитата Сообщение от Renji Посмотреть сообщение
Компилируете код под Линуксом, а потом подсовываете во все ту же виртуалку для тестов.
это мне зачем?, я вас совсем не понял (((

Добавлено через 3 минуты
Цитата Сообщение от Evg Посмотреть сообщение
Потом возникает второй этаж проблемы: а какой код генерирует компилятор. Вероятно, он должен уметь строить коды, которые используют protected mode и потребляют больше мегабайта памяти. Я уж навскидку вообще не помню о версиях компиляторов, так что даже не знаю, является ли 3.1 слишком старым для таких зада, или нет
Добавлено через 4 минуты
Хотя, если на руках есть бинарник компилятора, то по нему наверняка можно сказать, он в real-mode или нет

Не по теме:

Плохо это все понял, пора домой..., завтра посмотрю внимательнее

0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2017, 19:57
Цитата Сообщение от седьмой Посмотреть сообщение
а кто то в этой же теме писал, что вроде может работать...
Будет работать созданный gcc бинарный файл. Чего ему сделается то, при условии что никаких зависимостей от ОС он не тянет? Но саму компиляцию придется гонять под Линуксом.
1
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
25.03.2017, 07:06  [ТС]
Цитата Сообщение от Renji Посмотреть сообщение
Но саму компиляцию придется гонять под Линуксом.
Да такой вариант наверно подойдет, спасибо надо подумать, тем более что у разработчика есть и код и драйвер под линукс, функции кажется те же самые почти, с++ тем и хорош (если я правильно понял) что его код мало отличается от этих двух платформа, надо будет проанализировать, интересное предложение, спасибо огромное.

Добавлено через 4 минуты
Почитал сейчас еще раз документацию и оказалось, что кроме кода на си под дос для борланд си и турбо си, есть еще
Скачать Драйвер для 32-битных расширений DOS (библиотека функций Watcom C/C++) такой вот драйвер, может он теоретически пойти на ФриДос, она как раз 32х разрядная, наверно и оперативки сможет больше взять себе для компиляции, не подскажете?

Добавлено через 3 минуты
И еще до кучи вопрос в эту же тему, можно ли каким то образом все заголовочные файлы в программе ххх.срр отдельно откомпилировать в объектный можуль что бы при отладке в пошаговом режиме они быстрее грузились, а то дос довольно медленно работает и долго приходится ждать пока они все снова откомпилируются, вот часть кода с заголовочными файлами
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...#define TMK_CONFIGURATION_TABLE
 
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <bios.h>
#include <dos.h>
#include <errno.h>
#include <process.h>
#include <stdlib.h>
 
#ifdef __WATCOMC__
 
#define outportb outp
#define inportb inp
 
#define getvect _dos_getvect
#define setvect _dos_setvect
 
#include <i86.h>
#define peek(a,b) (*(short*)MK_FP(a,b))
 
#include <graph.h>...
Добавлено через 3 минуты
Цитата Сообщение от седьмой Посмотреть сообщение
ак что даже не знаю, является ли 3.1 слишком старым для таких зада, или нет
я понял так что это самый крутой компилятор для доса, потом уже пошла винда и круче не было, ну разве только турбо си тоже 3.1, но это я понял так что одно и тоже с борланд си?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.03.2017, 14:02
седьмой, а ты не пробовал Borland C++ 5.02? Среда - приложение Windows, поддерживает компиляцию DOS-программ.
0
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
25.03.2017, 15:47  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
а ты не пробовал Borland C++ 5.02? Среда - приложение Windows, поддерживает компиляцию DOS-программ.
Нет конечно, мне это не подойдет, у меня комп имеет один винт на котором стоит DOS (FreeDos) мне нужно готовую программу от разработчика доплить под свои требования и отладить в пошаговом режиме, если я ее (программу) под виндой буду компилировать на другом компе, то компиляция не пойдет, так как плата расширения сом порта находится на компе где стоит DOS и к ней есть драйвер тоже под DOS.. Это во первых, во вторых у меня на кoмпе с DOS rкомпиляция проходит из командной строки bcc.exe c парамерами, поэтому думаю ваше предложение мне никак не подходит. У меня проблема на в компиляции когда, а в его проверке в пошаговом режиме или по контрольным точкам в программе. Не хватает памяти. Если я не правильно вас понял, поясните еще раз пожалуйста.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.03.2017, 16:10
Цитата Сообщение от седьмой Посмотреть сообщение
У меня проблема на в компиляции когда, а в его проверке в пошаговом режиме
Цитата Сообщение от седьмой Посмотреть сообщение
При компиляции программы в ВС3.1 MS-DOS через интерфейсное меню Compile (Alt+F9) выходит сообщение, что недостаточно оперативной памяти для компиляции и программа останавливается
Ты себе противоречишь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2017, 16:10

Что если мне не хватает слоев
Доброго времени суток, максимальное кол-во слоев 31, и то 7 из них юнитовские, как можно еще добавить?

Что будет если не хватает мощности блока питания?
вопрос задан

Что происходит, если видеокарте не хватает блока питания?
Доброго времени суток! У меня есть видеокарта hd radeon 6770, есть два компа, один на сокете lga1156, второй lga 775. Первый компьютер...

Что можно сделать если нет вложенных индекс файлов в каждой папке???
Здравствуйте. Интересует такой вопрос: что можно сделать кроме как просто посмотреть директорию и содержимое папки на сервере если в каждой...

Что нужно сделать, если 1С пишет "Недостаточно памяти"
Информация взята с интернет ресурса - ******.(ru)/catalog/item3315.html Иногда бывает такое, что проводя какие либо операции в 1С, она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru