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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Если не хватает памяти на исключение? Что делать? 
:(
    Опции темы
IvanoffAndrey
Дата 14.9.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Согласно Страуструпу, минимум свободной памяти, которая должна быть доступна программе это память необходимая для генерации исключения bad_alloc.
Это значит всего лишь, что насколько я понимаю   bad_alloc (естественно потомок дригих классов) представляет некое подобие статической переменной которую одну и ту же постоянно бросают.
Почему бы, при написании своих исключений (конечно же включенный в общую иерархию), не делать таким образом.
К примеру:

Код

class A{
public:
    static class  error{};//Сам класс исключения.
    static error EXC; // Объект который кидаем.
void METOD(void){
   throw (EXC);
}
}

Я не описал инициализацию переменной EXC нарочно - и так вроде понятно.
[B]Таким образом, поскольку данная статическая  переменная будет инициализировать задолго до создания объекта (размер которого может быть очень большим) а именно на этапе запуска проги (помоему), то память мы уже под исключение зарезервировали и на его бросание хватит места.[B]
Если это не так, то я не знаю каким образом тратися память на бросание исключение кроме как на создание объекта?????
Кто что думает по этому поводу.?
 

Это сообщение отредактировал(а) IvanoffAndrey - 14.9.2007, 17:10
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу.
PM MAIL   Вверх
JackYF
Дата 14.9.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



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


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zkv
Дата 14.9.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(JackYF @  14.9.2007,  17:40 Найти цитируемый пост)
Ей бессмысленно делать что-либо другое - памяти-то нет. 

ей можно попробовать память освободить smile
PM MAIL   Вверх
IvanoffAndrey
Дата 14.9.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

ей можно попробовать память освободить

Действительно, к примеру скинуть что-нибудь временное  на хард.

Добавлено через 29 секунд
Цитата

то программе пора убиваться об стену

 smile 
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу.
PM MAIL   Вверх
Mayk
Дата 14.9.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(IvanoffAndrey @  14.9.2007,  21:09 Найти цитируемый пост)
Кто что думает по этому поводу.?

Не то Александрески, не то Саттер, не то они оба, но есть слухи что в современных условиях на PC проверять успешность выделения памяти бессмыссленно. Вот что по этому поводу говорит malloc(3)
Цитата

BUGS
       By  default,  Linux  follows an optimistic memory allocation strategy.  This means
       that when malloc() returns non-NULL there is no guarantee that the  memory  really
       is  available.  This is a really bad bug.  In case it turns out that the system is
       out of memory, one or more processes will be killed by the  infamous  OOM  killer.


Добавлено через 27 секунд
Короче, если программе не хватает памяти, то она об этом попросту может никогда не узнать.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
JackYF
Дата 14.9.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Цитата(zkv @  14.9.2007,  17:47 Найти цитируемый пост)
ей можно попробовать память освободить smile

предполагались, что эти попытки уже были сделаны smile


Цитата(Mayk @  14.9.2007,  18:45 Найти цитируемый пост)
optimistic memory allocation strategy

гыгык smile класс


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mihhail
Дата 14.9.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(IvanoffAndrey @  14.9.2007,  17:09 Найти цитируемый пост)
Согласно Страуструпу, минимум свободной памяти, которая должна быть доступна программе это память необходимая для генерации исключения bad_alloc.
.....................
.....................
Таким образом, поскольку данная статическая  переменная будет инициализировать задолго до создания объекта (размер которого может быть очень большим) а именно на этапе запуска проги (помоему), то память мы уже под исключение зарезервировали и на его бросание хватит места.

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

А такой случай: Загружена одна программа, начинает загружаться вторая, из-за нехватки памяти первая скидавается на хард и этим он забивается под завязку. А вторая при этом полностью занимает память. Первая - заблокирована до окончания работы второй.!?
Теоретика однако.... smile 

Это сообщение отредактировал(а) Mihhail - 14.9.2007, 21:22
PM MAIL WWW   Вверх
UnrealMan
Дата 15.9.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(IvanoffAndrey @  14.9.2007,  18:09 Найти цитируемый пост)
Почему бы, при написании своих исключений (конечно же включенный в общую иерархию), не делать таким образом.

В C++ одновременно может существовать несколько неперехваченных исключений (в том числе одного типа).
PM MAIL   Вверх
Любитель
Дата 15.9.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Mayk @  14.9.2007,  18:45 Найти цитируемый пост)
Не то Александрески, не то Саттер, не то они оба, но есть слухи что в современных условиях на PC проверять успешность выделения памяти бессмыссленно.

У первого не помню (его всё же больше всякие изящества интересуют smile ), а вот у второго было точно, притом достаточно подробно всё объяснялось - где, зачем и почему. Автору советую прочитать smile


--------------------
PM MAIL ICQ Skype   Вверх
IvanoffAndrey
Дата 15.9.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Плиз скинте название книги. Я очень люблю всякие книжки читать. Но об том авторе ничего прежде не слышал. Как понимаю это все еще классика?

Добавлено через 7 минут и 21 секунду
Цитата

В C++ одновременно может существовать несколько неперехваченных исключений (в том числе одного типа). 

Насколько я помню больше одного исключения (может больше двух) С++ не может обработать вообще и в этой ситуации просто грубо завершает программу?.
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу.
PM MAIL   Вверх
UnrealMan
Дата 15.9.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(IvanoffAndrey @  15.9.2007,  21:02 Найти цитируемый пост)
Насколько я помню больше одного исключения (может больше двух) С++ не может обработать вообще и в этой ситуации просто грубо завершает программу?. 

Необработанных исключений может быть сколько угодно, только все они должны приходить к разным обработчикам.
PM MAIL   Вверх
Любитель
Дата 16.9.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(IvanoffAndrey @  15.9.2007,  20:02 Найти цитируемый пост)
Плиз скинте название книги. Я очень люблю всякие книжки читать. Но об том авторе ничего прежде не слышал. Как понимаю это все еще классика?

Саттер: "Сложные задачи по C++" и (новее и интереснеее) "Новые сложные задачи по C++". Да - классика, но не совсем тривиальная.


--------------------
PM MAIL ICQ Skype   Вверх
IvanoffAndrey
Дата 16.9.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А что за книга у Александрески?
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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