>Я программирую под Linux (2.4.22) на си, используя компилятор gcc 3.4.3
>Посоветуйте самый безглючный способ инициализации памяти:
> 1) объявить static char *buffer; затем в main(): buffer = (char
>*) calloc(SIZE, 1); а в подключаемых файлах писать extern char *buffer;
Не должно даже линковаться. Переменные класса static не видны за
пределами модуля трансляции (в простейшем случае - c-файла), в
котором они объявлены.
>
> 2) объявить в каждом из файлов свой static char *buffer; в
>каждой функции
>писать buffer = (char *) calloc(SIZE, 1); а затем free(buffer);
>
А если упомянутые функции друг друга вызывают, то можно утечки
памяти заработать.
Лучше по мере надобности память в оных функциях выделять, а по
окончании оной надобности - освобождать.
> Просто блин эти сегфолты действуют на нервы...
>
Они не сами по себе возникают. Вообще SIGSEGV - вещь крайне полезная.
Позволяет быстро найти идиотские ошибки.
>И ещё вопрос: может ли возникать сегфолт при работе с памятью если
>ядро старое? (может быть, вопрос глупейший)
Если версия GLIBC с ядром не дружит (например, GLIBC сильно старая,
а ядро сильно новое), возможны кое-какие проблемы. Редко, но бывает.
В основном при использовании функций трассировки другого процесса,
установке ловушек (trap) и работе с pthread'ами.