LINUX.ORG.RU
ФорумTalks

[опрос] malloc

 


0

0
Допускаете ли вы, когда пишете ту или иную поделку, что malloc() вернет кукишь?

[ ] Да, у меня это учтено в моем аллокаторе, который таскаю с собой по проектам.
[ ] Да, у меня имеется небольшой механизм, который таскаю с собой по проектам.
[ ] Да, ругнусь в лог, поведение особо меня не волнует.
[ ] Нет конечно! Нищеброды у которых мало памяти не заслуживают внимания!
[ ] Я не использую динамическое выделение памяти.
★★★★★
Да, кстати:
[Х] Да, у меня имеется небольшой механизм, который таскаю с собой по проектам.
AiFiLTr0 ★★★★★
() автор топика
Что такое malloc?
anonymous
()
Я пока ничего толкового не написал. Так что не допускаю.
anonymous
()
[X] Я не использую динамическое выделение памяти.
UDP
()
Ответ на: комментарий от u5qh
> А где вариант "[ ] я пишу на брейнфаке и проблемы негров шерифа не интересуют" ?

[Х] Я пишу на Whitespace и проблемы белых расистов меня не интересуют.

Cancellor ★★★★☆
()
[х] Да, программа принудительно завершается сразу же.

Правда с умолчательной стратегией выделения памяти в линуксе получить кукиш от malloc возможно только если 3ГБ сразу запросить.

anonymous
()
Ответ на: комментарий от anonymous
> Правда с умолчательной стратегией выделения памяти в линуксе получить кукиш от malloc возможно только если 3ГБ сразу запросить.

Кстати просвятите, в чем плюсы такой оптимистичной стратегии? Верим в то, что свапа хватит? Или просто чтобы выкинуть лишний иф для быстродействия (т.е. проверку на предмет наличия этой самой памяти).
AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от AiFiLTr0
Как вариант тем, что если памяти не хватит, то придет OOM Killer и расчистит место.

man malloc вообще говорит, что «This is a really bad bug»

anonymous
()
> Допускаете ли вы, когда пишете ту или иную поделку, что malloc() вернет кукишь?

Тебя заморозили во времена турбоцэ и доса? Размораживайся, бедняжка. В наше время кукишь происходит вовсе не во время malloc(), а при первой записи в выделенную область.

anonymous
()
наверное это

[*] Да, у меня имеется небольшой механизм, который таскаю с собой по проектам.

void * et_smalloc(size_t size)
{
void *buf;
if (!size) return NULL;
label2:
buf = malloc(size); if (!buf) { usleep(USLEEPVAL); goto label2; } return buf;
}


да кошмар )
Sylvia ★★★★★
()
>Допускаете ли вы, когда пишете ту или иную поделку, что malloc() вернет кукишь?

2 my mind он его никогда не вернет ни в линуксе ни в оффтопике. Оффтопик правда может пошалить иногда когда увеличивает своп, но при этом неработоспособность твоей программы будет незначительным фактором на фоне дико тормозящей системы и отваливающихся всех подряд процессов.

Absurd ★★★
()
Если на сях быдлокодерствую, то да - проверяю возвращаемое значение.
marsijanin ★★
()
Ответ на: комментарий от Sylvia
Вот так наверное оно будет лучше смотреться.
void* et_malloc(size_t size)
{
void* buf=NULL;
while (!buf)
{
buf=malloc(size);
usleep(USLEEPVAL);
}
return buf;
}

Сам в случае недостатка памяти вызываю цепочку колбеков, которые высвобождают заюзанную память.
AiFiLTr0 ★★★★★
() автор топика
Ответ на: комментарий от Absurd
> 2 my mind он его никогда не вернет ни в линуксе ни в оффтопике.

Таки живо мачасть учить.


#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char *buf = (char *)malloc(SIZE_MAX);
	if (!buf) {
		printf("Absurd is lamer!\n");
	}

	return 0;
}
anonymous
()
Ответ на: комментарий от anonymous
> Тебя заморозили во времена турбоцэ и доса? Размораживайся, бедняжка. В наше время кукишь происходит вовсе не во время malloc(), а при первой записи в выделенную область.

Вовсе нет. В Solaris, например, lazy-аллокатора нет и кукиш возвращается как раз при malloc.
bigbit ★★★★★
()
Ответ на: комментарий от Sylvia
>наверное это

>label

>да кошмар

*трясётся от ужаса под столом*

jcd ★★★★★
()
> Допускаете ли вы, когда пишете ту или иную поделку, что malloc() вернет кукишь?

для поделок:

>[X] Да, у меня имеется небольшой механизм, который таскаю с собой по проектам.

совсем маленький:

#define SURE(x) if (!(x)) { пишем что и где и вываливаемся }

и дальше пишем

SURE(x = malloc(..))

и т д

gods-little-toy ★★★
()
всегда учитываю как и вообще все коды возврата
xtron
()
Ответ на: комментарий от anonymous
>Тебя заморозили во времена турбоцэ и доса? Размораживайся, бедняжка. В наше время кукишь происходит вовсе не во время malloc(), а при первой записи в выделенную область.


Really ?

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
size_t s = 1*1024*1024;
int c=0;
char *buf;
for (;;)
{
buf = (char*)malloc(s);
if (buf == NULL)
{
printf("malloc() == NULL\n");
break;
}
c++;
buf[0]=0;
printf ("c=%lu\n", c);
}
return 0;
}
xtron
()
Ответ на: комментарий от anonymous
> Тебя заморозили во времена турбоцэ и доса? Размораживайся, бедняжка. В наше время кукишь происходит вовсе не во время malloc(), а при первой записи в выделенную область

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

tailgunner ★★★★★
()
Каждая функция в качестве кода ошибки может вернуть нехватку памяти. Обычно оно всё тупо наверх раскручивается, если памяти не хватает, но в экзотических случаях можно какие-нибудь кеши освободить и перезапустить функцию.
Legioner ★★★★★
()
Ответ на: комментарий от anonymous
>> 2 my mind он его никогда не вернет ни в линуксе ни в оффтопике.

>Таки живо мачасть учить.

Перфекционизм конечно похвален, но нормально обработать нехватку памяти можно только в прихожениях которым особая отказоустойчивость и не нужна. Ну, в консольной утилите можно размотать граф вызовов до корня освободив попутно все ресурсы, вернуть из main() код ошибки, дальше что? Ценность представляют процессы которые в режиме 24/7 висят(должны), а там чего-то осмысленное в случае если malloc() вернул null сделать довольно сложно.

Absurd ★★★
()
Когда память начнет заканчиваться, система будет ТАК тормозить что до того как программа успеет что-либо сделать, пользователь её убьет. возможно ребутом машины.
anonymous
()
У меня Java Головного Мозга.
wfrr ★★☆
()
Ответ на: комментарий от Absurd
Не - не, стоит посрать в лог и закрыться, тогда админ хотябы узнает почему сервер внезапно упал.
wfrr ★★☆
()
Проверяю каждый malloc. 32 мегабайта памяти на всё про всё, а моя программа крутится там не одна.
anonymous
()
Ответ на: комментарий от AiFiLTr0
> Вот так наверное оно будет лучше смотреться.

Тоже убогий код, т.к. нет оганичения на кол-во итераций и usleep() выполняется даже при успешном выделении памяти.
andreyu ★★★★★
()
Ответ на: комментарий от anonymous
>Проверяю каждый malloc. 32 мегабайта памяти на всё про всё, а моя программа крутится там не одна.

А нужна ли там вообще динамическая память? Может, стоит сделать отдельный стек для возращения массивов из функций или ограничиться преаллоцированной памятью?

Absurd ★★★
()
Ответ на: комментарий от Absurd
Не всё так просто - там строки, БД и пара уже написанных 3rd party библиотек, включая шаблонизатор.

Писать задротски - увольте, а вообще память ещё ни разу не кончалась, это скорее мера предосторожности, чтобы сервер хотя-бы сообщил в браузер что ему памяти мало а не тупо упал в segfault.

anonymous
()
Да, программа остановится и ругнётся "Мало памяти. Возьмите компьютер побольше!"
question4 ★★★★★
()
[X] Нет конечно! Нищеброды у которых мало памяти не заслуживают внимания! [x] Я не использую динамическое выделение памяти.
vvfrr
()
[x] Да, ругнусь в лог, и сгенерирую исключение. А там пусть кэтчи думают, что с неизвестным исключением делать.
redgremlin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.