Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с выделением памяти 
:(
    Опции темы
DaJunior
Дата 8.6.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



People HELP!!!

Нужно память выделить 64000 байт(наверное все поняли зачем smile ), чет никак... smile
Пишу значит:

///////////////////////fragment//////////////////////////////
char *buf;
if(!(buf = new char[320*200])) cout<<"Нифига не получилось!";
///////////////////////fragment//////////////////////////////

Ну оно в принципе и понятно, почему не получилось: сегмент программы всего 64К.
Что делать, не знаю, не урезать же прогу до 1.5К(даже больше резать придется), да и что я в этот килобайт умещу...
Чего только делать не пробовал, и модель памяти менял... ничего не помогает...

Помогите, люди умные, уже 3-ий день голову ломаю... 
PM MAIL   Вверх
Romikgy
Дата 8.6.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



А че за система?
Имхо ограничение на эту цифру было под досом! 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
DaJunior
Дата 8.6.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



Под ДОС'ом и пишу... так надо! =))) 
PM MAIL   Вверх
Romikgy
Дата 8.6.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



небось еще и на турбо си?!
зайди в настройки компилятора , где генерация кода и поставь модель памяти Huge, может поможет, я не проверял smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
DaJunior
Дата 8.6.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



Я же писал, что модель памяти менял уже, них... не помогает... А Турбо Си - сила! Мне под дос нуно... вот! 
PM MAIL   Вверх
Romikgy
Дата 8.6.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Цитата(DaJunior @  8.6.2006,  11:56 Найти цитируемый пост)
Я же писал, что модель памяти менял уже

гед?
Цитата(DaJunior @  8.6.2006,  11:56 Найти цитируемый пост)
А Турбо Си - сила!

Я бы не был так оптимистичен
дома поиграюсь , потом чет дельное отвечу, на работе нет доса,
кса а на два массива разбить нельзя? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Replicator
Дата 8.6.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 30.4.2006
Где: Outer Heaven

Репутация: нет
Всего: нет



Неужели С не может работать с динамической памятью? Сильно сомневаюсь. В TP это называлось "куча" и там можно было выделять память блоками не более 64К. Количество самих блоков ограничивалось только доступной ОС памятью.

Думаю, тут надо использовать что-то вроде getmem(), freemem(). 
--------------------
 
PM WWW ICQ   Вверх
regis
Дата 8.6.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: 2
Всего: 7



ИМХО, странная ситуация какая-то. В любой модели памяти с far-указателями по дефолту (даже не надо Huge, вполне достаточно Large) все должно прекрасно работать. Единственная возможная причина неудачи --- если память DOS (те самые 640K) вдруг кончилась. Мало вероятно, но... см. вывод команды mem перед запуском программы.
 
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
DaJunior
Дата 8.6.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



Ок, спасибо всем... Попробую работать через кучу, напрямую никак не получится, это я уже давно понял... пойду книжки умные читать... 
PM MAIL   Вверх
DaJunior
Дата 8.6.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



Нет чета ниче не получается... Я попробовал вот так:

///////////////////////fragment//////////////////////////////
char far *p = (char *) malloc(64000);
///////////////////////fragment//////////////////////////////

Хотя malloc - по сути - тот же new...

Но все та же фигня, не хочет он выделять столько памяти...
И по всей видимости выделяет её в near-куче, вместо far-кучи, но это еще пол беды, бог с ней, с near-кучей. Он пытается выделить память по тому же сегменту, что и сама прога висит... понятное дело, там не наберется 64000 байт, если сама прога будет в памяти занимать, пусть даже 2кб... Ведь сегмент программы(как я писал выше) ограничен 64кб(для тугих - 65536 байт)... Как мне заставить комп выделять память по другому сегменту, где уже свободно необходимое мне кол-во памяти??? Я уже всего Касаткина перерыл... Может проблема с компилятором??? хотя я пробовал в инсте - тоже глухо... Может кто сталкивался с этой проблемой??? 
PM MAIL   Вверх
likehood
Дата 8.6.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



может ты массив в стеке выделяешь? Попробуй сделать глобальный массив, при этом не забудь добавить перед ним far:
Код

far char buf[0xFFFF];


Кстати, если юзаешь Turbo C++ 3.0, то советую перейти на Borland C++ 3.1 - там глюков меньше. 
PM MAIL   Вверх
DaJunior
Дата 8.6.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



Сейчас попробовал так:

/////////////////////
char p[64000];
/////////////////////

с моделью памяти large. Работает, но вот динамический массив - никак...smile что за фигня - не понимаю... Видимо при попытке создать динамический массив - действительно он создается в стэке... 

может кто попробует выделить динамич-ий массив размером 320*200 байт, и пришлет исходник проги... подозреваю, что глючит компилятор... 

P.S. кстати пишу на Borland C++ 3.1, а не на турбо, как некоторые подумали... 
PM MAIL   Вверх
DaJunior
Дата 9.6.2006, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



Неужели никто не смог разобраться с этим вопросом??? Эй, мега программеры - где вы??? 
PM MAIL   Вверх
chaos
Дата 9.6.2006, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(DaJunior @ 8.6.2006,  20:17)
320*200 байт

до боли знакомый размер массива smile  не с видео памятью ли ты работаешь?
если нет, то у меня возникло две бредовых идеи
1) попользовать видео память для своих целей  smile 
2) перегрузить new delete (если конечно С++) и работать с диском

Добавлено @ 06:40 
а если с видео памятью работаешь то зачем тебе еще один массив? 
PM WWW   Вверх
DaJunior
Дата 9.6.2006, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



1) Да да, мне это нужно для работы с графикой! Кто с ней работал, наверняка знает о видео-страницах, но вот беда, в том режиме, в кот-ом пишу я - их просто нет(так что попользовать видео память - никак) smile((... поэтому надо съэмитировать их(вернее её)... иначе жуткие мерцания спрайтов - обеспечены smile((... 

2) работать с диском??? - с хардом чтоли??? нет, это будет конкретный тормоз моей шустрой проге, не для того я оптимизировал весь алгоритм...

Может кто-нить еще че подскажет??? 
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.