Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / кажется я начинаю понимать... / 15 сообщений из 15, страница 1 из 1
09.11.2007, 12:47:21
    #34927822
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
...почему стало так много глючных и тормознутых прог, а юзеров превратили в бесплатных бета-тестеров !
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
09.11.2007, 13:03:58
    #34927899
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
и? поделись, что-ли, наблюдением ))
...
Рейтинг: 0 / 0
09.11.2007, 13:05:07
    #34927905
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
egorychи? поделись, что-ли, наблюдением ))
пропустил ссылку? - см. !
...
Рейтинг: 0 / 0
09.11.2007, 13:21:36
    #34927993
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
ксакеп - журнал для детей.
как сказал бы Гоблин - для тупых подростков.

А дети не пишут софт, так что конкретно эта статья никакого вреда
индустрии не принесет :)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 13:33:28
    #34928065
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
Мда, когда сказать нечего лучше промолчать.... Это я об авторе сего опуса....
...
Рейтинг: 0 / 0
09.11.2007, 13:58:23
    #34928200
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
Cerebrum пишет:

Много не читал, прочел только про выделение памяти.
Ну чего -- в общем правильно все, не фиг память проверять -
это просто мертвый код. Он все равно ничего не сможет сделать,
потому что нету возможности управлять менеджером памяти,
рестартов в С нет, а такие средства как SEH предусматривают
наличие альтернативных потоков управления (вот там уже рестарты
есть).

Могу даже сказать, что в продукте, над которым я сейчас работаю,
именно так и делается - при недостатке памяти внутри аллокатора
просто вызывается код, генерирующий защиту памяти (такой ASSERT
времени выполнения). Просто потому что если памяти нет, ее взять
не откуда, и делать тут нечего.

Продукт - СУБД, т.е. код ентерпрайзнее некуда. Так что не знаю как
там на счет детей.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 14:02:47
    #34928228
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
Cerebrum пишет:
> ...почему стало так много глючных и тормознутых прог, а юзеров
> превратили в бесплатных бета-тестеров !

Прочитал все. Абсолютно согласен с автором.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 14:55:06
    #34928499
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
MasterZiv
Cerebrum пишет:
> ...почему стало так много глючных и тормознутых прог, а юзеров
> превратили в бесплатных бета-тестеров !

Прочитал все. Абсолютно согласен с автором.
Posted via ActualForum NNTP Server 1.4меня, к примеру, тоже не особенно эта статья напугала... хотя, конечно, освобождать всё-же надо ))
...
Рейтинг: 0 / 0
09.11.2007, 15:25:48
    #34928631
cap83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
Где Читать ?????
...
Рейтинг: 0 / 0
09.11.2007, 15:26:35
    #34928638
cap83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
Тфу блин '!' синий !
...
Рейтинг: 0 / 0
09.11.2007, 16:52:23
    #34928998
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
MasterZiv wrote:
>
> Cerebrum пишет:
>
> Много не читал, прочел только про выделение памяти.
> Ну чего -- в общем правильно все, не фиг память проверять -
> это просто мертвый код. Он все равно ничего не сможет сделать,

Истина, как обычно - где-то посредине. На мой взгляд, автор правильно
написал - нужно учесть все риски. Отсутствие проверки успешности
выделения памяти все-таки достаточно необычное явление и дрожно быть
обосновано. Например, если при работе на Desktop/server WinXP/Linux
кончилась память, то это обозначает одно из двух - или запросы слишком
велики (как вариант - глюк с неправильным вычислением размера памяти, с
чем все-таки иногда можно бороться), или вешалка наступила еще полчаса
назад, и система давно и надежно лежит в свопе. Так, что если вы
уверены, что ваш код никогда не выйдет за рамки таких условий - то да,
можно не проверять результат выделения памяти. Если нет - то проще
сделать это сразу, чем потом ломать голову, перенося фрагмент кода под
какой-нибудь ARM с тем-же Linuх без свопа, но с buddy аллокатором.

Что касается IsBadReadPtr, согласен - это явно излишне. Проверка на NULL
- тоже по обстоятельствам. Например в функции являющейся частью
интерфейса подсистемы - проверю обязательно, внутри подсистемы
расставляю всевозможные ASSERT и VERIFY.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 20:29:32
    #34929482
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
MasterZivПродукт - СУБД, т.е. код ентерпрайзнее некуда.Вот в mysql если для выполнения запроса требуется памяти больше, чем определено настройками, он возвращает "Not enough memory" и продолжает работать.

Насчёт проверки параметров, хе-хе, в винапи на этот счёт дырку нашёл. В одну и ту же функцию иногда можно нулл передавать, иногда нельзя.
...
Рейтинг: 0 / 0
10.11.2007, 18:19:36
    #34930126
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
teras пишет:

> Истина, как обычно - где-то посредине. На мой взгляд, автор правильно
> написал - нужно учесть все риски. Отсутствие проверки успешности
> выделения памяти все-таки достаточно необычное явление и дрожно быть
> обосновано.

Наоборот, очень частое.
На C++ при неудачном выделении памяти выбрасывается исключение.
Так что проверять не надо ничего - надо исключения обрабатывать.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.11.2007, 20:03:07
    #34930221
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
MasterZiv wrote:
> teras пишет:
>
>> Истина, как обычно - где-то посредине. На мой взгляд, автор правильно
>> написал - нужно учесть все риски. Отсутствие проверки успешности
>> выделения памяти все-таки достаточно необычное явление и должно быть
>> обосновано.
>
> Наоборот, очень частое.
> На C++ при неудачном выделении памяти выбрасывается исключение.
> Так что проверять не надо ничего - надо исключения обрабатывать.
>

Это немного из другой оперы - (исключение/возврат признака ошибки) это
разные подходы к обработке ошибок, но в C++ проверка отсутствия памяти
все равно *есть*, и находится она в самом new, и эту ситуацию всегда
можно обработать в вызывающей функции. Образно говоря, эти подходы
выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
/* 1) Типичный поход в C: переносимый код, для любых машин */
char * mystrdup(const char * str)
{
	char * ptr = malloc(strlen(str)+ 1 );
	if (ptr == NULL)
		return NULL;
	strcpy(ptr, str);
	return ptr;
}

/* 2) подход C++: как правило работает, для любых машин */
char * mystrdup(const char * str)
{
	char * ptr = malloc(strlen(str)+ 1 );
	if (ptr == NULL)
		throw (std::bad_alloc());
	strcpy(ptr, str);
	return ptr;
}

/* 3) Вы упомянули про код такого рода: подход для машин с кучей
 * памяти
 */
char * mystrdup(const char * str)
{
	char * ptr = malloc(strlen(str)+ 1 );
	if (ptr == NULL)
		panic("out of mem");
	strcpy(ptr, str);
	return ptr;
}

/*  4) А в статье упоминается такой код: подход для машин с
 * кучей памяти и обязательной защитой.
 */
char * mystrdup(const char * str)
{
	char * ptr = malloc(strlen(str)+ 1 );
	strcpy(ptr, str);
	return ptr;
}

(3) и (4) практически эквивалентны, разве что сообщение в (3) более внятное.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.11.2007, 00:20:58
    #34930358
grieg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кажется я начинаю понимать...
MasterZiv

На C++ при неудачном выделении памяти выбрасывается исключение.
Так что проверять не надо ничего - надо исключения обрабатывать.


При этом механизм виртуальной памяти часто (в ядре Линуксе -- по умолчанию, афаик) устроен так, что реальное выделение памяти происходит при обращении к ней, а не при команде выделения. То есть успешное выделение не гарантирует, что память действительно выделена.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / кажется я начинаю понимать... / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]