Что это значит 300K ?
Есть размер кода, стека и данных.
Причем размер кода показывает и код библиотек, большинство из
которых разделяемые (если конечно программы не собирались как static).
Если уж размер кода для программ сильно
критичен, то можно большинство функций вынести с свою разделяемую
библиотеку.
Стек у каждого процесса свой.
Данные можно вынести в разделяемую память, но IPC у юникса такой, что
лучше в это дело не ввязываться.
А вообще-то непонятно какая необходимость запускать 100 процессов
одновременно, что программа-то делает ?
Все это я знаю (про стэк, код и данные). Вопрос был вообще про уменьшение (неважно чего, в смысле стэк ...) размера програмы в памяти. Для того, чтобы не было вопросов, зачем 100 процессов поясняю: в сети 254 адреса (192.168.10.1-192.168.10.254), так вот каждые полчаса нужно сканировать их всех сканером портов (работает реально около 100 машин). Сканер портов - собственный (на основе connect-а, как в pscan-е). Теперь, зачем это надо - не могу сказать, а параллельно это все надо делать, чтобы все это работало быстрее (время на выполнение сканирования очень ограничено, а параллельно по моим тестам (для моих задач) действительно быстрее). Т.К. времени мало надо заоптимизировать и по памяти - так точно быстрее будет (программа запускается на разных компьютерах с дискеты: от 384Мб ОЗУ до 16Мб - сами понимаете swap тут просто трещит всем винчестером). Так что помогите, если не тяжко. Нужен любой способ уменьшить размер, при этом не сильно замедляя функционирование и загрузку программ.
Обиделись вы все что-ли ? (что я Вам цель проекта не сказал) Проблема тут одна: одна сеть постоянно прикрыта FireWall-ом и периодически открывается на 5 минут, так вот за это время я обязан ее проверять, но так как машин там добавилось, я иногда просто не успеваю обработать всю сеть из-за тормозов на моей системе (2 машины могут справиться с задачей легко, если диапазон адресов поделить пополам, да вот сверху сказали, что одной всегда хватало и.т.д). Так что не обижайтесь, и отпишите, кто что знает про оптимизацию в этой области.
К сожалению вызов clone() удаляет нас от POSIX-а, поэтому ипользовать его нельзя. Можно ли что-либо подобное организовать на POSIX-функциях ? (Про clone() я знал, но он ведь только для Linux ... или во FreeBSD и Solaris это тоже есть ?). PTHREADS - это POSIX Threads ? Под какие UNIX-ы, API PTHREADS тоже работает без переписывания и исправления кода ?
На Linux поток тоже порядком ест ресурсов,
я рекомендую каждый поток сделать с НАИНИЗШИМ
приорететом:
#ifdef __linux__
nice(19); /* ;-) - на LinuxThreads by Xavier Leroy*/
#else
/* shed_param->priority=get_min_priority(SCHED_OTHER); */
#endif
в FLTK-brain это Fl_Brain::rank(double p);
(http://www.chat.ru/~yaroslav_v)