Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Проблемы с памятью (C под DOS)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Frozen Pinguin
Гость





СообщениеДобавлено: Чт Авг 21 2003 09:35    Заголовок сообщения: Проблемы с памятью (C под DOS) Ответить с цитатой

Написал программу... при попытке запустить выдает Stack Overflow (пытался компилировать на режимах от Medium до Huge на Borland Tubo C++ 3.0 и на QC (2.0, кажется).
Динамическая память не используется, не динамические переменные в сумме занимают не больше 12 кб...
Причем если освободить примерно 6 кб памяти (уменьшением массивов), то все работает нормально.

Почему так???
И что с этим делать?

Функции не принимают и не возвращают ничего крупнее double.

Кстати, еще вопрос: почему на любой модели coreleft() и farcoreleft() возвращают примерно 60кб?
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Пт Авг 22 2003 08:34    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

Была такая фигня. Только ошибка переполнения стека не возникала, просто данные портились. Попробуй сделать большие нединамические переменные статическими или динамическими, чтобы на стеке оставалось не более 2 кб.

А не всё ли равно сколько возвращает coreleft ? Ведь всё равно нельзя выделить блок больше одного сегмента (64кб)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Сб Авг 23 2003 18:39    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

Может, из-за многоуровневой (бесконечной)рекурсии (если есть).
Проблему можно обойти, перезапустив среду. Но после одного выполнения баг повторится.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Frozen Pinguin
Гость





СообщениеДобавлено: Пн Авг 25 2003 16:53    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

Баг идет при первом выполнении.
Вернуться к началу
Frozen Pinguin
Гость





СообщениеДобавлено: Пн Авг 25 2003 16:56    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

>большие нединамические переменные статическими или динамическими, чтобы на стеке оставалось не более 2 кб.

а вот с этого места, пожалуйста, поподробнее... разве автоматические переменные занимают места больше, чем статические?

> А не всё ли равно сколько возвращает coreleft ? Ведь всё равно нельзя выделить блок больше одного сегмента (64кб)

Да нет... просто даже если я пытаюсь выделить много раз по чуть-чуть, он все равно не дает больше 64кб Sad
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Пн Авг 25 2003 17:31    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

> а вот с этого места, пожалуйста, поподробнее... разве автоматические переменные занимают места больше, чем статические?

Дело в том что статические переменные не используют стек, и вот это работает
#include stdio.h
#include stdlib.h

#define LEN 64000


int main()
{
static char s[ LEN ];
char t[ LEN ];
long i;

randomize();
for( i=0; i < LEN; i++ )
s[ i ] = rand();

for( i=0; i < LEN; i++ )
t[ i ] = s[ i ];

randomize();
for( i=0; i < LEN; i++ )
if( t[ i ] != char(rand()) )
return printf( "error at step %u\n", i );

return printf( "OK!\n" );
}

>Да нет... просто даже если я пытаюсь выделить много раз по чуть-чуть, он все равно не дает больше 64кб Sad

А как пытаешься ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Frozen Pinguin
Гость





СообщениеДобавлено: Вт Авг 26 2003 16:24    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

> А как пытаешься ?

через ?alloc(), но сейчас примера программы нет Sad

примеры будут позже, где-то через неделю, когда учиться уеду Wink
Вернуться к началу
Chea
Гость





СообщениеДобавлено: Вт Авг 26 2003 17:37    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

Изначально BCPP 3 дает стек стек ограниченного размера (16 или 8)Mb примерно так.
Есть какие-то опции (уже точно не помню какие).
Смотри там.
Второе вроде бы при учебе от преподов звучало что существуют модификаторы для управления стеком. Как всегда у студентов все пролетает мимо ушей, поэтому больше не скажу. Смотри все что ставится для линковщика (начинается типа $ или -).
3. Стек использеется для передачи параметров при вызове функций и для локальных переменных.
Попробуй другие способы передачи параметров и старайся избавится от больших локальных переменных (типа массивов) унеси их в кучу
.
Вернуться к началу
Chea
Гость





СообщениеДобавлено: Вт Авг 26 2003 17:40    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

Размер кучи по умолчанию 64К
См. опции
Вернуться к началу
Chea
Гость





СообщениеДобавлено: Вт Авг 26 2003 17:42    Заголовок сообщения: Ошибочка читать Mb как Kb (-) Ответить с цитатой

.
Вернуться к началу
Frozen Pinguin
Гость





СообщениеДобавлено: Ср Авг 27 2003 16:34    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

1) спасибо, все так и есть Smile
2) "унести в кучу" означает "описывать как глобальные"?
Вернуться к началу
Chea
Гость





СообщениеДобавлено: Чт Авг 28 2003 05:46    Заголовок сообщения: Унести в кучу - выделять в свободной памяти, а за ненадобностью удалять(-) Ответить с цитатой

.
Вернуться к началу
программист
Гость





СообщениеДобавлено: Пт Авг 29 2003 14:48    Заголовок сообщения: Re: Проблемы с памятью (C под DOS) Ответить с цитатой

Память тут не при чём. Переполняется стек вызова функций. (GREA правильно писал, только ошибка будет всплывать при ЛЮБОМ выполнении, даже первом).
Проверь внимательно свою рекурсию на предмет бесконечных вызовов. Уверен, что ошибка в ней.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...