The OpenNET Project / Index page

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

malloc и NULL (memory malloc)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: memory, malloc,  (найти похожие документы)
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Alex Korchmar 2:5020/28.101 Sat 09 Jan 99 00:18 Subj : malloc и NULL ________________________________________________________________________________ Denis Pershin <Denis_Pershin@p5.f120.n5000.z2.fidonet.org> wrote: YVK>>> И работает с памятью медленнее немного. AK>> зато предсказуемо. В linux'е sigsegv поймала бы сперва куча совершенно AK>> невиновных программ. DP> Hекорректно написаных. Ибо malloc на NULL не проверяют. лохом быть не надо, ламером быть не надо. Этим, как его, а, во - зопухом тоже не надо быть. В смысле - не надо звездить о том, чего не знаешь. Пишем "коректно": #include <stdio.h> #include <stdlib.h> main() { void *p; int i; for(i=0; i<500; ++i) { if((p=malloc(1024*1024))==NULL) { printf("NULL at %d!\n", i); break; } } printf("ok\n"); } запускаем: [ttyp3]:alx[563]~/work> gcc -Wall s.c -o s s.c:5: warning: return-type defaults to `int' s.c: In function `main': s.c:18: warning: control reaches end of non-void function [ttyp3]:alx[564]~/work> ./s ok [ttyp3]:alx[565]~/work> пожалуй, специально для тебя (ты ведь не почешешься проверить): [ttyp3]:alx[565]~/work> time !! time ./s ok 0.000u 0.060s 0:00.09 66.6% 0+0k 0+0io 75pf+0w и нет, разумеется,в этой машине не 500 мегабайт оперативки. А вот тебе _единственный_ способ получить-таки NULL: заменим 1024*1024 числом, большим всей доступной памяти+своп (пусть это будет *200) [ttyp3]:alx[681]~/work> ./s NULL at 0! ok (впрочем, на 2.2 можно засунуть 1 в /proc/sys/vm/overcommit_memory и получить NULL at 10 - не потому, что своп кончился, а потому, что адресное пространство у нас все же ограничено - двумя гигабайтами. Фигово - но под OS/2, вон, жили в 500 мегах и ничего) А вот теперь ты нам и об'яснишь, с позиции исторического материализма, что сейчас произошло, чем об'ясняется этот фокус и почему практически бестолку в линуксах проверять malloc на null, а зато надо иметь встроенный в любую нетривиальную программу обработчик SIGSEGV. А равно почему для тестирования под OpenBSD я вляпал рекурсивный вызов. Только книжки умные сперва почитай, чтоб опять не облажаться. > Alex --- ifmail v.2.14.os-p2 * Origin: Down System -2 (2:5020/28.101@fidonet) _ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Leonid Broukhis 2:5020/400 10 Jan 99 16:56:24 Subj : malloc и NULL ________________________________________________________________________________ From: leob@asylum.mailcom.com (Leonid Broukhis) Boris Tobotras wrote: >Serg> IMHO если malloc вернул NULL, то это скорее всего система уже в >Serg> состоянии падения. :) > > echo 0 > /proc/sys/vm/overcommit_memory Более того, если машина используется для чего-нибудь полезного и существенного или отвечает на внешние запросы, то echo 0 > /proc/sys/vm/overcommit_memory очень полезно написать в rc.local. Leo --- ifmail v.2.14dev2 * Origin: Demos online service (2:5020/400@fidonet) _ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Vitaly E Lavrov 2:5030/580 11 Jan 99 01:18:24 Subj : malloc и NULL ________________________________________________________________________________ From: "Vitaly E.Lavrov" <lve@cit.aanet.ru> Alex Korchmar <Alex.Korchmar@p101.f28.n5020.z2.fidonet.org> wrote: > Denis Pershin <Denis_Pershin@p5.f120.n5000.z2.fidonet.org> wrote: > [ttyp3]:alx[565]~/work> > пожалуй, специально для тебя (ты ведь не почешешься проверить): > [ttyp3]:alx[565]~/work> time !! > time ./s > ok > 0.000u 0.060s 0:00.09 66.6% 0+0k 0+0io 75pf+0w > А вот тебе _единственный_ способ получить-таки NULL: > заменим 1024*1024 числом, большим всей доступной памяти+своп (пусть > это будет *200) Hет, если добавить после malloc bzero() то все ОК lve:/tmp# time ./a.out Sound: DMA (output) timed out - IRQ/DRQ config error? ^^^^^^^^^^^^^^^ это в этот момент mpg123 отсвопили :) NULL at 113! ok Command exited with non-zero status 3 0.69user 1.93system 0:21.55elapsed 12%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (2096major+29045minor)pagefaults 16511swaps > [ttyp3]:alx[681]~/work> ./s > NULL at 0! > ok > (впрочем, на 2.2 можно засунуть 1 в /proc/sys/vm/overcommit_memory и > получить NULL at 10 - не потому, что своп кончился, а потому, что > адресное пространство у нас все же ограничено - двумя гигабайтами. > Фигово - но под OS/2, вон, жили в 500 мегах и ничего) > А вот теперь ты нам и об'яснишь, с позиции исторического материализма, Такое ощущение, что при malloc проверяется кол-во физически используемой памяти ( как du считает физически занятые блоки ) Виталий . --- ifmail v.2.13 * Origin: SPb State University of Aerospace Instrumentati (2:5030/580@fidonet) _ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Alex Korchmar 2:5020/28.101 12 Jan 99 03:05:04 Subj : malloc и NULL ________________________________________________________________________________ Boris Tobotras <Boris_Tobotras@f510.n5020.z2.fidonet.org> wrote: Serg>> IMHO если malloc вернул NULL, то это скорее всего система уже в Serg>> состоянии падения. :) BT> echo 0 > /proc/sys/vm/overcommit_memory Кто-то, похоже, никогда не задавался вопросом, а что же это такое. (между прочим, ноль там по дефолту). А вот что лежит в Documentation/sysctl: static inline int vm_enough_memory(long pages) { /* This stupid algorithm decides whether we have enough memory: * while simple, it should work in most obvious cases. It's * easily fooled, but this should catch most mistakes. */ long freepages; /* Sometimes we want to use more memory than we have. */ if (sysctl_overcommit_memory) return 1; freepages = buffermem >> PAGE_SHIFT; freepages += page_cache_size; freepages >>= 1; freepages += nr_free_pages; freepages += nr_swap_pages; freepages -= num_physpages >> 4; return freepages > pages; } > Alex --- ifmail v.2.14.os-p2 * Origin: Down System -2 (2:5020/28.101@fidonet)

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру