Тогда тебе надо специально для этой функции написать специальный компилятор..... =)) изврат... а может ты ещё на куски разобьёшь?.... чтоб легче компилятору было?
во-во. По-моему изначально было выбрано неверное направление. Надо не компилятор под файл искать а сгенерировать файл для компилятора. Тем более что файл машинно-генерируемый.
S_T_A_S_ Для gcc попробуй заюзать флаг -Os Вот небольшая выдержка из man gcc: Код (Text): -Os Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size. It also performs further optimiza- tions designed to reduce code size. -Os disables the following optimization flags: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -fprefetch-loop-arrays
Avoidik Pelles C - я пробовал. Результаты обозначенные как lcc - это он и есть. Оригинальный lcc, думаю, пробовать совсем не стОит. Tiny C компилит буквально за секунды! Правда, размер кода получается такой же, как и у сорца =( Довольно интересные результаты показал GCC 3.3.1 с ключём -O2. Тихо завершил работу через 8 часов шебуршания винтом. Ни сообщения об ошибке, ни выходного файла пока найти не удалось =) semen > Ну это имеет смысл, если объектников (или функций) много. А у меня по-сути одна (остальными мона пренебречь). Хотя попробую - MSVC работать не мешает, в отличае от остальных компилеров винт не дёргает. Понижаю ему приоритет - его и не видно. tasman > Думаю, он безмолвно помрёт как и с -O2 ;( Хотя всё равно интересно. Fallout > Дык этим и занимаюсь - выше уже написАл. infern0 > Теперь это уже понятно. Первая попытка - что-то вроде пробного забега, полезно для оценки приемлимости решения в промышленнах масштабах
Хе-хе. Напоминает мне одну историю, как ребята из Томска привезли аналог нашей системы, которая не делает и пятой части что наша, но exe уже весит > 40 Мб. Виват кодогенерация!!!!!!!! В 22 веке конечно. =))))
S_T_A_S_, слушай, жутко интересно, что все-таки этот код делает? Насколько я понимаю, речь может идти о моделировании какого-то процесса. Например работы ПЛИС-ки. Правда современные продвинутые пакеты моделирования уже генерят напрямую исполняемый код, а не C как раньше. Вроде это позволяет добиться более оптимальных результатов.
Sten Это из области крипто. Вообще, код ужасно примитивный, ничего сверхсложного там нет, я очень удивлён, что компилеры не справляются =) Ключ /GL для MSVC не помогает. На данный момент выводы такие: Из протестированных, только 3 компилера (GCC, MSVC и Tiny C), вообще способны откомпилировать код. GCC - жуткий тормоз, оч сильно дёргает винт; оценка не обективна, поскольку использовался виндосный порт MinGW, под *nix, возможно всё будет по-другому. MSVC - при работе экономно расходует память, что не мешает работать на компе, но оптимизировать отказывается; Tiny C - очень быстро - секунды! но оптимизировать он похоже не умеет совсем. Ещё бы разобраться, как получить c его помощью что-то запускаемое под виндос - был бы незаменим для отладки. Откомпилировать код с требуемой оптимизацией не способен ни один компилер. Думаю, это надёжный гвоздь в крышку гроба для баек "автоматическая оптимизация рулит" =)
S_T_A_S_ Кстати у компиляторов ведь еще лимиты есть, может ты за один из них вышел? Для MSVS: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclan g/html/vclrfcompilerlimits.asp
semen Про пределы знаю (у MSVC с ними, кстати, плохо - до рекомендованных не дотягивает). Когда компилер за них выходит - он соответствующую ошибку выдаёт с номером строчки. Здесь же говорит "слишком сложная функция".
S_T_A_S_> Думаю, это надёжный гвоздь в крышку гроба для баек "автоматическая оптимизация рулит" =) Удачи в ручной оптимизации.
captain cobalt Спасибо, удача мне действительно понадобится НО не с ручной оптимизацией, поскольку с ней проблем нет - сел и написал, а как раз, что бы автоматическую хоть как-то задействовать )
Разделил функцию на много маленьких кусочков. Теперь MSVC и GCC компилируют за пару минут. Код не самый хороший - много лишних call появилось :-( Помимо этого GCC плохо понимает особенности x86 - не использует аккумулятор, поэтому размер после него больше на 12% Попытка сделать функции __forceinline для MSVC приводит к той же ошибке "function too large" :-/ G++ просто тупо игнорирует inline. В общем, задачу можно считать решенной, на сколько это позволяют современные инструменты. А современные инструменты можно считать далёкими от совершенства ;(
infern0 Это палка о двух концах - при меньшем количестве функций им придётся возвращать больше значений. А поскольку в С более одного значения возвращается через эээ... неудобные места, то появятся накладные расходы на передачу ссылок и т.п. IMHO то на то и выйдет.