nixp.ru v3.0

19 октября 2017,
четверг,
03:11:24 MSK

DevOps с компанией «Флант»
iliya написал 30 апреля 2005 года в 19:48 (335 просмотров) Ведет себя как мужчина; открыл 13 тем в форуме, оставил 196 комментариев на сайте.

Пытаюсь скомпилить сишную программу в FreeBSD, она компилится , а после входа в функцию где

char buffer[64Kb];

она выдает Segmentation Fault.

Компилю очень просто $cc -lc -pthread -lssl -lcrypt test.c -o test

Да и Linux’e она работает нормально.

Genie

видимо, срабатывает ограничение на размер stack segment. либо это такая специфика выделения памяти для stack в freebsd. на самом деле, там получается, что необходимо выделить дополнительно около 65кб (учитывая дополнительные переменные), что может и быть проблемой.

не лучше ли использовать malloc/free для выделения такого объёма памяти?

iliya

Да malloc лучше, только с ним таже проблема он не выделяет большие куски.

Там buffer просто буффер, а дальше идет тот самый malloc в коде и если вместо buffer[64Kb] сделать buffer[1Kb], то программа мрет на malloc’е.

Genie

ээммм.. кто-то глючит. осталось определить, кто и в чём. ;)

int my_func(int arg1, char *arg2)
{
char *buffer;
//...
buffer=malloc(sizeof(char)*65536);
if(!buffer) return -1; //no memory
//...
free(buffer);
return 0;
}

за примером использования — можно и в гугль, к примеру — в описании malloc.

и никаких тебе Segfault-ов.

iliya

Не, дело в другом.

Проверка есть, только почему я не могу выделить N Kb malloc’ом. (где N > 1 Kb)

Памяти 1Gb, свободна почти вся.

Мне malloc все время NULL возвращает.

А таже прога на Linux работает нормально.

В том то и вопрос почему так мало выделяет, может че с системой, но на ней apache пашет, а он куда больше чем моя прога жрет.

Genie

хммм.. ulimit?

ну и strace тебе в помощь…

с такими граблями я не встречался, так что — тут тогда тебе не помощник ;)

iliya

Ещё че хочу сказать.

Если прогу скомпилить в Linux ,и запустить в FreeBSD, то она работает и память выделяется и все в шоколаде, только в конце умирает из-за не правильного обработчика сигнала, но это фигня, так-то она пашет, а если на FreeBSD компилить , то мрет сука на char buffer[65536];

, меняем на char buffer[1024]; , проскакивает и на

if((data=(char*)malloc(65535))==NULL)

{

printf(«Fuck off. Not enought memory\n»);

exit(0);

}

Пишет «Fuck off. Not enought memory».

Не ну че за фигня.

Может я не так компилю????