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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.