The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

17.03.2010 13:56  Оптимизация приложения "Hello world"

В заметке "Hello from a libc-free world!" рассмотрен вопрос неоптимальной компоновки простейшего приложения на языке Си, возможности которого ограничены присвоением переменной текста "Hello world". При компиляции такой программы в GCC результирующий исполняемый файл имеет размер 11 Кб. При попытке разобраться почему так много, выяснилось, что компилятор использует вызов libc, даже если функции данной библиотеки не используются в самой программе.

При сборке "gcc -nostdlib -o hello hello.c" размер программы сократился до 1 Кб, но такая программа перестала выполняться корректно. Для исправления ситуации был сформирован упрощенный блок инициализации (подпрограмма _start). В сети также доступно более подробное руководство по сокращению исполняемых файлов в формате ELF.

Дополнение: опубликована вторая часть статьи.

  1. Главная ссылка к новости (http://blog.ksplice.com/2010/0...)
Лицензия: CC-BY
Тип: английский / Практикум
Ключевые слова: elf, gcc, compile, lib, assembler, link, optimization
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Vitto74 (ok), 14:00, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Что называется нет предела совершенству.
     
     
  • 2.5, Аноним (-), 14:25, 17/03/2010 [^] [ответить]    [к модератору]
  • +/
    Что называется делать нечего.
    Большенство программ требуют стандартную библиотеку для работы. А те, что не требуют, те проще написать на ассемблере. Извращение это все...
     
     
  • 3.6, User294 (ok), 14:34, 17/03/2010 [^] [ответить]     [к модератору]
  • +/
    На ассемблере какого процессора, сэр У ассемблера есть одна проблемка - он непо... весь текст скрыт [показать]
     
     
  • 4.10, Аноним (-), 14:39, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    да ладно, практического смысла это имеет мало лучше бы скорость загрузки библио... весь текст скрыт [показать]
     
     
  • 5.17, User294 (ok), 15:47, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Когда как Вот немного лирики http www wasm ru article php article onebyte ... весь текст скрыт [показать]
     
     
  • 6.18, Аноним (-), 15:57, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    тот кто мыслит как быдло пишет на жабе и C потому что тогда это будет отдельный... весь текст скрыт [показать]
     
     
  • 7.23, User294 (ok), 16:16, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Мыслить как быдло можно в принципе на любом языке Быдло предпочитает упомянутые... весь текст скрыт [показать]
     
     
  • 8.25, Аноним (-), 16:25, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Можно Но не обязательно все же писать все на asm Можно и сайты на asm писать, ... весь текст скрыт [показать]
     
     
  • 9.38, Ariel (??), 17:02, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    скорее GCC - плагин к LLVM, на Mac используется с 2007 г LLVM-GCC4 2, что вам ме... весь текст скрыт [показать]
     
     
  • 10.41, Аноним (-), 17:48, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    считайте что религия. свободная GPL альтернатива LLVM которая заменит в перспективе оптимизатор gcc должна появиться и точка.
     
     
  • 11.53, Ariel (??), 20:09, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    LLVM вам не нравится свободной лицензией BSD статью о его возможностях вообще ч... весь текст скрыт [показать]
     
     
  • 12.57, User294 (ok), 21:17, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Да, потом нам будут приезжать очень такие свободные тулчейны в виде блобятины по... весь текст скрыт [показать]
     
  • 10.65, минона (?), 12:33, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    перечетайте статью и не только про llvm ещё раз, т к у вас каша в голове 1 ... весь текст скрыт [показать]
     
     
  • 11.67, аноним (?), 13:48, 18/03/2010 [^] [ответить]    [к модератору]  
  • –2 +/
    >лучше (т.к. используя гнушные утилиты можно получить нативный код)

    дотнет генерирует _нативный_ код

     
     
  • 12.68, минона (?), 14:10, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    развейте свою мысль и тогда поговорим ps возможность такая есть но также есть... весь текст скрыт [показать]
     
  • 12.70, User294 (ok), 14:18, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Что сказать то хотели В конечном итоге процы нихрена кроме нативного кода выпол... весь текст скрыт [показать]
     
  • 11.84, Ariel (??), 22:55, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    статью писал не я 1, 2 LLVM не моджет иметь синтаксический или лексический анал... весь текст скрыт [показать]
     
     
  • 12.85, минона (?), 23:44, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    это гораздо ближе к истине кроме вот этого тогда придумайте зачем понадобились... весь текст скрыт [показать]
     
     
  • 13.87, Ariel (ok), 01:30, 20/03/2010 [^] [ответить]     [к модератору]  
  • +/
    если понимать LLVM в узком смысле, то вы правы, но Крис как бы намекает нам, чт... весь текст скрыт [показать]
     
  • 10.78, User294 (ok), 20:16, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Тут еще минета Джоббсу не хватает в знак признательности, или типа того Лично ... весь текст скрыт [показать]
     
  • 9.69, User294 (ok), 14:15, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    В этом треде никто и не предлагал писать на асме Более того, тут вообще только ... весь текст скрыт [показать]
     
     
  • 10.72, минона (?), 14:54, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    все верно, кроме одного вот выдержки - http ru wikipedia org wiki Unix_way бо... весь текст скрыт [показать]
     
     
  • 11.80, User294 (ok), 20:38, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Подождите, уважаемый минона, а разве я вообще утверждал что скорость надо оптими... весь текст скрыт [показать]
     
     
  • 12.82, минона (?), 21:14, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    может быть я не так понял но я точно уверен, что сила юниксвэй вообще и линукс ... весь текст скрыт [показать]
     
     
  • 13.83, минона (?), 21:22, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    а да в посикс нет завязок ни на фс, ни на их реализации и т д иногда проще в л... весь текст скрыт [показать]
     
  • 10.74, Аноним (-), 15:52, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Эти две фразы противоречат друг другу Сначала приложение нужно разработать, пот... весь текст скрыт [показать]
     
     
  • 11.79, User294 (ok), 20:27, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Нормальный архитект должен прикинуть проблемные места еще на фазе проектирования... весь текст скрыт [показать]
     
  • 4.16, mike lee (?), 15:44, 17/03/2010 [^] [ответить]     [к модератору]  
  • +1 +/
    ты статейку то открой автор так или иначе предлагает непортабельный код, заменя... весь текст скрыт [показать]
     
     
  • 5.24, User294 (ok), 16:19, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Когда как В какомнить embedded такое на каждом углу Иногда натурально бывает н... весь текст скрыт [показать]
     
  • 2.9, User294 (ok), 14:38, 17/03/2010 [^] [ответить]    [к модератору]  
  • +1 +/
    >Что называется нет предела совершенству.

    Есть :) программы отрицательной длины не бывают :P.

     
     
  • 3.36, savant (ok), 16:53, 17/03/2010 [^] [ответить]    [к модератору]  
  • +2 +/
    Ага, идеальна та программа, которая не написана
     
     ....нить скрыта, показать (30)

  • 1.2, Зилибоба (ok), 14:07, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Хм, может там еще есть что соптимизировать?
     
     
  • 2.86, hhg (ok), 22:02, 19/03/2010 [^] [ответить]    [к модератору]  
  • +/
    ага, можно. можно выкинуть нафик строку. назвать прогу "Хелло ворлд" и выводить имя исполняемого файла из переменных окружения.
    Ж:-P
     
  • 1.3, www2 (ok), 14:11, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Как будто неоптимизированные программы закончились, принялись за столь полезную программу, как Hello World.
     
     
  • 2.8, User294 (ok), 14:37, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    ИМХО, это можно засчитать за вполне вменяемый туториал по поводу того как и что ... весь текст скрыт [показать]
     
     
  • 3.11, Аноним (-), 14:42, 17/03/2010 [^] [ответить]    [к модератору]  
  • +2 +/
    многомеговое монстрило по любому будет завязано на libc - бессмыленно это.
     
     
  • 4.19, User294 (ok), 15:59, 17/03/2010 [^] [ответить]     [к модератору]  
  • +2 +/
    Бессмысленно - пытаться освоить азы на сложной и навороченной конструкции Это к... весь текст скрыт [показать]
     
     
  • 5.26, Аноним (-), 16:27, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    В реальной программе в любом случае будет зависимость на libc Это не hello wor... весь текст скрыт [показать]
     
     
  • 6.47, аноним (?), 18:45, 17/03/2010 [^] [ответить]     [к модератору]  
  • –2 +/
    практический смысл имеет переработка гцц, дабы тот перестал вываливать неэффекти... весь текст скрыт [показать]
     
     
  • 7.56, Карбофос (ok), 20:50, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    пройди вступительный тест в разрабы gcc  и переработай его.
     
  • 7.81, User294 (ok), 20:41, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    К link-time оптимизации весь этот бред вообще никак не относится А hand-optimiz... весь текст скрыт [показать]
     
  • 6.60, User294 (ok), 21:27, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Далеко не в любом Скажем в embedded отсутствие стандартной либы вообще норма жи... весь текст скрыт [показать]
     
  • 6.64, phaoost (ok), 10:40, 18/03/2010 [^] [ответить]    [к модератору]  
  • +/
    почему это в любом? а если dietlibc или ulibc
     
     ....нить скрыта, показать (9)

  • 1.4, Аноним (-), 14:22, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • –2 +/
    Вот бы так еще ядро оптимизировали...
     
  • 1.7, zazik (ok), 14:35, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А вы знаете, что если в PHP вместо двойных кавычек использовать одинарные, то парсер не будет пытаться найти и подставить переменные в этой строке. А ведь это драгоценные такты!
     
     
  • 2.20, Аноним (-), 15:59, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >А ведь это драгоценные такты!

    потому и написали компилятор PHP, потому что спрыгивать с этого дерьма на что-то более быстрое (когда все уперлось в него) еще дольше чем написать компилятор

     
     
  • 3.22, zazik (ok), 16:05, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    А вам не кажется, что если бы он был таким дерьмом, то на нём не писало бы такое... весь текст скрыт [показать]
     
     
  • 4.27, Аноним (-), 16:30, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >А вам не кажется, что если бы он был таким дерьмом, то на нём не писало бы такое количество людей?

    Миллионы мух не могут ошибаться в дерьме определенно что-то есть?

     
     
  • 5.28, zazik (ok), 16:33, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >Миллионы мух не могут ошибаться в дерьме определенно что-то есть?

    Ничего не понял, знаки препинания помогут тебе вдохнуть смысл в сей набор слов.

     
     
  • 6.63, Аноним (-), 08:48, 18/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Вы правда никогда не слышали это выражение ... весь текст скрыт [показать]
     
  • 4.29, Аноним (-), 16:35, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    > А вам не кажется, что если бы он был таким дерьмом, то на нём не писало бы такое количество людей?

    нет не кажется.

     
  • 4.32, аноним (?), 16:40, 17/03/2010 [^] [ответить]    [к модератору]  
  • –1 +/
    Про Windows напомнить? Быдло всегда ищет где поменьше думать надо.
     
     
  • 5.33, zazik (ok), 16:43, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    OMG, это в Пыхе-то думать не надо Да, там нет строгой типизации, ну и что Дума... весь текст скрыт [показать]
     
     
  • 6.35, Cobold (??), 16:50, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    в исходники php загляните чтобы говорить о его качестве ... весь текст скрыт [показать]
     
     
  • 7.37, zazik (ok), 16:54, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >в исходники php загляните чтобы говорить о его "качестве".

    И что там, в исходниках? Зашифрованный призыв Сатаны?

     
     
  • 8.39, Cobold (??), 17:29, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    там почерк создателей, иногда полезно познакомиться чтобы не поддаваться лишним ... весь текст скрыт [показать]
     
     
  • 9.40, zazik (ok), 17:31, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Во-первых, у них есть нормальное коммунитэ, которое достаточно успешно патчит и ... весь текст скрыт [показать]
     
     
  • 10.51, Cobold (??), 19:20, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    кстати, Вам не доводилось им багрепорты слать Субъективно конечно, может это то... весь текст скрыт [показать]
     
     
  • 11.52, zazik (ok), 19:54, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    Доводилось, правда один и по хелпу, а не по сырцам Относятся нормально, пофикси... весь текст скрыт [показать]
     
  • 7.43, azure (ok), 17:59, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    как связана реализация языка (интерпретатор) с качеством написанного на нем кода?
     
     
  • 8.44, аноним (?), 18:14, 17/03/2010 [^] [ответить]     [к модератору]  
  • +1 +/
    В этом мире все связано Хуже интерпретатор - медленнее исполняется код Неэффек... весь текст скрыт [показать]
     
     
  • 9.48, аноним (?), 18:51, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >А если рассмотреть PHP как язык, он изначально рассчитывался на непрофессионалов

    трололо.

    кстати, sql тоже изначально рассчитан на непрофессионалов. отказываешься от sql?

     
     
  • 10.50, Cobold (??), 19:02, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    И кто его сечас собственно как язык программирования использует Это скорее прот... весь текст скрыт [показать]
     
  • 9.49, Cobold (??), 18:55, 17/03/2010 [^] [ответить]     [к модератору]  
  • +/
    1 да, а ещё количество идиотских багов, нестабильность языка и настроек дефолтн... весь текст скрыт [показать]
     
  • 4.34, Cobold (??), 16:46, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    очень наивно
     
     
  • 5.46, аноним (?), 18:43, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    местечковые гуру зрят в корень.
    все переходим на perl6
     
  • 4.59, pavlinux (ok), 21:21, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    А кто вам сказал, что на нем пишут?  
    99.9% Веб-дезигнеров никогда с нуля не писали - Google -> Шаблоны для сайта скачать.  :)
    А потом узнают, что это хрень называется PHP, Ruby, JS ...
    И давай кричать на сайтах "- Я знаю кунг-фу!!!"
     
     
  • 5.61, zazik (ok), 23:35, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >А кто вам сказал, что на нем пишут?
    >99.9% Веб-дезигнеров никогда с нуля не писали - Google -> Шаблоны для сайта скачать.  :)
    >А потом узнают, что это хрень называется PHP, Ruby, JS ...
    >И давай кричать на сайтах "- Я знаю кунг-фу!!!"

    Форум для разработчиков сказал.

     
     
  • 6.62, pavlinux (ok), 00:04, 18/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >>А кто вам сказал, что на нем пишут?
    >>99.9% Веб-дезигнеров никогда с нуля не писали - Google -> Шаблоны для сайта скачать.  :)
    >>А потом узнают, что это хрень называется PHP, Ruby, JS ...
    >>И давай кричать на сайтах "- Я знаю кунг-фу!!!"
    >
    >Форум для разработчиков сказал.

    Они-то и есть 1%

     
     ....нить скрыта, показать (24)

  • 1.12, Andrey Mitrofanov (?), 14:53, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    [:::]
    http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
    http://bsd.opennet.ru/openforum/vsluhforumID9/3022.html
    И далее -- http://google.ru/search?q=assembler+linux+elf везде.
     
     
  • 2.54, Damon (??), 20:24, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    Странно, что на самом опеннете, никто ничего не искал похожего, а ведь есть пост "Борьба за уменьшения размера (до 300 байт!) программы "Hello,World" (optimization)" -- http://www.opennet.ru/base/dev/smallest_code.txt.html, сам по нему с gcc разбирался.
     
     
  • 3.71, Andrey Mitrofanov (?), 14:26, 18/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >Странно, что на самом опеннете, никто ничего не искал похожего

    Ну дык, даже первую страницу гугля лениво просматривать, не то что подбирать более релевантные запросыP))

    ---Война-то уже дааавно кончилась, а поезда всё везут и везут раненных анонимов, оптимизирующин на Hello.World[:::>

     
  • 1.15, aZ (ok), 15:19, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Наконец-то опомнились. Теперь осталось оптимизировать всего-то миллионы программ.
     
     
  • 2.30, reanimat0r (?), 16:35, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    Золотые слова.
     
  • 1.21, Карбофос (ok), 16:03, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    подобные туториалы есть и для виндов, вот это я использовал для написания дипломки. http://uinc.ru/articles/28/
     
  • 1.42, Diogene the Open Source programmer (?), 17:49, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Муха-ха - вспомнилась молодость ...FIDO ... анологичный срач и как результат MS-DOS'овский .com длиной 26 байт включая знаменитую строку ... :)
     
  • 1.45, аноним (?), 18:19, 17/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Прикольно - этот hello, world, собранный на FreeBSD занимает по умолчанию в два раза меньше места, чем в linux.
     
     
  • 2.55, Damon (??), 20:37, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    >Прикольно - этот hello, world, собранный на FreeBSD занимает по умолчанию в
    >два раза меньше места, чем в linux.

    Там может выравнивание секций elf'а отличаться по дефолту. В исполняемых файлах (elf и pe), порой бывает некоторое кол-во мусора ( http://www.codenet.ru/progr/formt/elf_pe.php ):

    >>Некоторые особенности так же связаны со страничной организацией памяти.
    >>ELF файлы линкуются таким образом, что границы и размеры секций приходятся на 4-х килобайтные блоки файла.
    >>А в PE формате, не смотря на то, что сам формат позволяет выравнивать секции на 512 байт, используется выравнивание секций на 4к, меньшее выравнивание в Windows не считается корректным.

    Здесь, правда не тот случай -- сама программа меньше 4к. :-)
    Надо просто сравнить скрипты линкера, и несколько подкрутив, думаю, можно получить сравнимый с фряшным размер и в пингвине.

     
  • 2.58, Карбофос (ok), 21:19, 17/03/2010 [^] [ответить]    [к модератору]  
  • +/
    для этого надо проверить, какие секции в бинарники остаются. а в целом, про удаление ненужностей:

    http://timelessname.com/elfbin/
    http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
    http://www.codebreakers-journal.com/content/view/280/97/

     
  • 1.73, sluge (ok), 15:28, 18/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    реальный софт тащит за собой такую кучу библиотек что такая оптимизация не имеет смысла...
    хотя нет, имеет-для вирей например :-D
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor