On Thu, Oct 20, 2005 at 11:25:48AM +0300, Michael Shigorin wrote: > On Thu, Oct 20, 2005 at 06:49:03AM +0400, Alexey Tourbin wrote: > > В binutils >= 1:2.15.92 есть новая опция --reduce-memory-overheads. > > Вместе с --no-keep-memory получается приемлемый результат: для линковки > > ppc386 используется 108M, для линковки fp используется 177M. Реально > > RSS требуется меньше, так что ppc386 и fp удается скомпоновать даже на > > машинке с 128M, при активной поддержке kswapd. Но всё же это большой > > успех, потому что это разница между "работает" и "не работает". > > Лёш, у нас на сборочнице полтора гига памяти и свопится оно > на SCSI. :) Как раз такие задачи иногда проще (в смысле времени) > решать оглашением "эй, оно тут память жрёт", особенно если > желающих применить рапшиль несколько. У меня своя сборочница скоро будет неплохая. Для доступа к чужой сборочнице нужен bandwidth. Дело здесь не в этом. Просто хочется "подкрутить" существующую технику оптимизации, чтобы она приемлемо работала на low-end машинах. К сожалению в ld(1) сказано, что при экономии памяти работает O(n^2), а не O(n) алогритм. Нужно будет ещё поэкспериментировать. Но для сборки больших проектов со smart linking перерасход памяти становится основной проблемой. Кто ничего не понял, smart linking -- это специальная техника оптимизации статической линковки. Вместо объектных *.o файлов создаются *.a файлы (архивы *.o файлов). То есть *.o файл нарезается на мелкие-мелкие кусочки. При линковке с *.a файлами линкер выдёргивает только те кусочки, которые реально используются в бинаре. Это такая техника в стандартном линкере, она ещё со времен царя Гороха. Но она работает не очень эффективно по времени/памяти. Бинарь может получиться меньше раза в 2 в некоторых случаях.