The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Null pointer assignment в malloc (malloc memory)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: malloc, memory,  (найти похожие документы)
- BEST_PEOPLE (2:5077/15.22) ------------------------- BEST_PEOPLE (SU.C_CPP) - From : Valentin Nechayev 2:5020/400 28 Apr 00 17:57:16 Subj : Null pointer assignment в malloc ------------------------------------------------------------------------------- * Forwarded from area 'SU.C_CPP' From: netch@carrier.kiev.ua (Valentin Nechayev) Hello Dmitry Kapustin! >> AN>> ptr = malloc( xxx ); >> AN>> *ptr = value; >> AN>> недопустимо. А тот, кто написал эту программу, так не считает. К >> AN>> разумным, соответственно, отнесён быть не может. Так, >> AN>> кнопкодав... DK> Странный ты человек, Александр. Проще было бы кратко объяснить человеку, DK> что malloc может вернуть 0, чем делать такие выводы. Да и выводы DK> неправильные. Одно дело - ты пишешь критический системный компонент, DK> который должен жить долго не выгружаясь и адекватно реагировать на DK> недостаток ресурсов в системе. А другое дело - выделить 5 байт в десктопной DK> программе, которая предназначена для исполнения на машинах с десятками DK> мегабайт виртуальной памяти... Hу Для таких ситуаций программа пишется так, чтобы вызывался не malloc, а какой-нибудь xmalloc (стандартное имя для оного в юниксовом мире). Код примерно такой: void* xmalloc( size_t request ) { void* p = malloc( request ); if( !p ) { syslog( LOG_CRIT, "xmalloc: request for %lu bytes failed", (unsigned long) request ); abort(); } return p; } По abort() оно к тому же может испечь корку, в которой через backtrace можно найти (если это нужно), кто вдруг выжрал память. (Разумеется, это все еще зависит от принятой в системе схеме распределения памяти ;) Если это win9* или linux стандартного вида и без rlimit'ов, то оно упрется в предел памяти, после чего процессы начнут клиниться (причем не обязательно те, что выжрали память, а скорее те, кто захотели при этом). FreeBSD начнет отстреливать тех, кто захотел память. NT как-то достаточно хитро ведет себя. Деталей не помню...) DK> выполнит некорректную операцию с вероятностью почти 0, ну закроет юзер. Я DK> вон недавно смотрел DDK для Win2K, там по сравнению с NT 4.0 появились DK> функции, позволяющие работать без риска вызвать blue screen при нехватке DK> системных ресурсов. Hехватка базовых ресурсов - память, открытые файлы, место на диске, процессы - очень тяжело действует на практически любые программы. Это уже не эхотаг, но мне кажется правильной тактика демпфирования запросов: при достижении некоторых рубежных значений - 60, 70, 80, 90 процентов - рассылаются соответствующие оповещения; 10% ресурса всегда в резерве для системных нужд (и рута, если юникс). DK> То есть некоторые функции из DDK валили ядро NT 4.0 (!!!) при DK> нехватке ресурсов, и ничего, мир еще стоИт. А среди разработчиков ядра NT DK> не только кнопкодавы, я полагаю. Так что ты перебрал. А для обработки DK> неудач выделения памяти в десктопной программе лучше использовать механизм DK> исключений - надоедает каждую аллокацию на 0 проверять. И если не удалась DK> аллокация - просто сносить задачу, сохранив важные данные. А как узнать, что является важными данными и как сносить задачу? Послать exception - это, конечно, было бы лучше всего, но не везде можно. DK> P.S. Я сам-то скорее педант - стараюсь все тщательно проверять. но другие DK> имеют право так не делать. И работодатели их понимают. Тот же xmalloc() прячет проверку, чтобы не надо было вручную каждый раз писать такие обороты. Hо применяя эту тактику ко всему, а не только к проблемам памяти, мы придем к тем же C++ exceptions. ... А дальше не сочинилось... -- -- Valentin Nechayev netch@carrier.kiev.ua II:LDXIII/DCCCLXXIII.CCC --- ifmail v.2.15dev5 * Origin: Lucky Netch Incorporated (2:5020/400)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:




  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor