7Mb C кода чем компилить?

Тема в разделе "WASM.ZEN", создана пользователем S_T_A_S_, 18 апр 2005.

  1. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    есть ещё PellesC
     
  2. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Тогда тебе надо специально для этой функции написать специальный компилятор..... =)) изврат... а может ты ещё на куски разобьёшь?.... чтоб легче компилятору было?
     
  3. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    во-во. По-моему изначально было выбрано неверное направление. Надо не компилятор под файл искать а сгенерировать файл для компилятора. Тем более что файл машинно-генерируемый.
     
  4. tasman

    tasman New Member

    Публикаций:
    0
    Регистрация:
    25 май 2004
    Сообщения:
    44
    Адрес:
    Ukraine
    S_T_A_S_

    Для gcc попробуй заюзать флаг -Os Вот небольшая выдержка из man gcc:
    Код (Text):
    1.  -Os Optimize for size.  -Os enables all -O2 optimizations that do not
    2.      typically increase code size.  It also performs further optimiza-
    3.      tions designed to reduce code size.
    4.  
    5.      -Os disables the following optimization flags: -falign-functions
    6.      -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
    7.      -fprefetch-loop-arrays
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Avoidik

    Pelles C - я пробовал. Результаты обозначенные как lcc - это он и есть. Оригинальный lcc, думаю, пробовать совсем не стОит.





    Tiny C компилит буквально за секунды! Правда, размер кода получается такой же, как и у сорца =(



    Довольно интересные результаты показал GCC 3.3.1 с ключём -O2. Тихо завершил работу через 8 часов шебуршания винтом. Ни сообщения об ошибке, ни выходного файла пока найти не удалось =)





    semen >




    Ну это имеет смысл, если объектников (или функций) много. А у меня по-сути одна (остальными мона пренебречь). Хотя попробую - MSVC работать не мешает, в отличае от остальных компилеров винт не дёргает. Понижаю ему приоритет - его и не видно.





    tasman >




    Думаю, он безмолвно помрёт как и с -O2 ;( Хотя всё равно интересно.





    Fallout >




    Дык этим и занимаюсь - выше уже написАл.





    infern0 >




    Теперь это уже понятно. Первая попытка - что-то вроде пробного забега, полезно для оценки приемлимости решения в промышленнах масштабах :)
     
  6. jekyll

    jekyll New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2003
    Сообщения:
    92
    Адрес:
    Russia
    Хе-хе. Напоминает мне одну историю, как ребята из Томска привезли аналог нашей системы, которая не делает и пятой части что наша, но exe уже весит > 40 Мб.

    Виват кодогенерация!!!!!!!! В 22 веке конечно. =))))
     
  7. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
    S_T_A_S_, слушай, жутко интересно, что все-таки этот код делает? :) Насколько я понимаю, речь может идти о моделировании какого-то процесса. Например работы ПЛИС-ки.

    Правда современные продвинутые пакеты моделирования уже генерят напрямую исполняемый код, а не C как раньше. Вроде это позволяет добиться более оптимальных результатов.
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Sten

    Это из области крипто.





    Вообще, код ужасно примитивный, ничего сверхсложного там нет, я очень удивлён, что компилеры не справляются =)



    Ключ /GL для MSVC не помогает.



    На данный момент выводы такие:

    Из протестированных, только 3 компилера (GCC, MSVC и Tiny C), вообще способны откомпилировать код.

    GCC - жуткий тормоз, оч сильно дёргает винт; оценка не обективна, поскольку использовался виндосный порт MinGW, под *nix, возможно всё будет по-другому.

    MSVC - при работе экономно расходует память, что не мешает работать на компе, но оптимизировать отказывается;

    Tiny C - очень быстро - секунды! но оптимизировать он похоже не умеет совсем. Ещё бы разобраться, как получить c его помощью что-то запускаемое под виндос - был бы незаменим для отладки.

    Откомпилировать код с требуемой оптимизацией не способен ни один компилер.

    Думаю, это надёжный гвоздь в крышку гроба для баек "автоматическая оптимизация рулит" =)
     
  9. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    semen

    Про пределы знаю (у MSVC с ними, кстати, плохо - до рекомендованных не дотягивает). Когда компилер за них выходит - он соответствующую ошибку выдаёт с номером строчки. Здесь же говорит "слишком сложная функция".
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    S_T_A_S_



    Cygwin маст дай. Под реальным *nix'ом всё гораздо лучше.
     
  12. captain cobalt

    captain cobalt New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    222
    Адрес:
    /ru/perm
    S_T_A_S_> Думаю, это надёжный гвоздь в крышку гроба для баек "автоматическая оптимизация рулит" =)



    Удачи в ручной оптимизации. ;)
     
  13. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    captain cobalt

    Спасибо, удача мне действительно понадобится ;) НО не с ручной оптимизацией, поскольку с ней проблем нет - сел и написал, а как раз, что бы автоматическую хоть как-то задействовать :))
     
  14. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Разделил функцию на много маленьких кусочков.

    Теперь MSVC и GCC компилируют за пару минут.

    Код не самый хороший - много лишних call появилось :-(

    Помимо этого GCC плохо понимает особенности x86 - не использует аккумулятор, поэтому размер после него больше на 12%

    Попытка сделать функции __forceinline для MSVC приводит к той же ошибке "function too large" :-/

    G++ просто тупо игнорирует inline.



    В общем, задачу можно считать решенной, на сколько это позволяют современные инструменты. А современные инструменты можно считать далёкими от совершенства ;(
     
  15. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    S_T_A_S_

    раздели на меньшее количество кусочков - будет грань между оптимизацией и количеством call.
     
  16. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    infern0

    Это палка о двух концах - при меньшем количестве функций им придётся возвращать больше значений. А поскольку в С более одного значения возвращается через эээ... неудобные места, то появятся накладные расходы на передачу ссылок и т.п. IMHO то на то и выйдет.
     
  17. aSL

    aSL New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    43
    Адрес:
    Russia


    Не. Не игнорирует. Надо его просто очень сильно попросить ;)