LINUX.ORG.RU

Линкеры. Оптимизация и удаление лишнего кода во время линковки.

 , , , линкеры


3

3

Здравствуйте. Собственно у меня несколько вопросов по поводу работы линкеров в современных тулчейнах.
Во первых, с удивлением обнаружил, что линкер из binutils по умолчанию линкует сожержмое объектных файлов ПОЛНОСТЬЮ. То есть, даже если из одного объектного файла с несколькими функциями во всей программе используется только одна из них - всё равно прилинковано будет всё содержимое объектного файла. Что интересно, линкер от M$ под оффтопиком по умолчанию делает тоже самое.
Я знаю что для gcc и ld можно укзать специальные опции, благодяря которым компилятор каждую функцию поместит в отдельную секцию, а линкер потом вырежит все неиспользуемые. У линкера от M$ тоже есть специальная опция.


Но почему такое поведение не принято по умолчанию? Это выглядит как просто расходование дискового пространства - зачем мне в программе код, который нигде не используется? Мне такое поведение кажется глупым, потому прошу знающих людей объяснить и указать где я не прав.


Соответсвенно ещё вопрос, насколько современные линкеры стрипят код - сколько в создаваемых с помощью современных тулчейнов лишнего, совершенно не нужного кода?
Буду особенно благодарен, если кто скажет чего можно почитать в тему.


Ответ на: комментарий от BRE

Так проблемы и глюки в чем заключались? Своими словами. :)

ты никогда не думал, что ТРИ(а в цитате все 6) РАЗНЫХ модели организации памяти это не очень просто? У каждой модели свои особенности, свои баги и свои фичи. И код желательно писать под все три сразу.

emulek
()
Ответ на: комментарий от emulek

Ну не пиши ерунду. Я тебе выше писал, поставь мсдос, туда борланд с++ 3.1 (все это легко находится в сети) и попробуй сам. :)

А свои домыслы, или страшные сказки рассказанные тебе одноклассниками, про те времена выбрось из головы. Они кроме улыбки переходящей в изумление больше ничего не вызывают. :)

BRE ★★
()
Ответ на: комментарий от emulek

а свой qsort ты не осилил сделать? Или осилил, но не дождался завершения?

Причем тут кусок, ссань - ты реально идиот?

я знаю. А вот ты — задумайся, детка. Для начала попробуй сам, ручками написать.

Что пилить ссанина? Ты вообще иди почитай к чему я привел кусорт.

дык где твой-то код? Начало за тобой, это же ты меня учишь жить. Не? Я же анскильная лолка, а ты — царь. Вот и демонстрируй, каков ты монарх. А я, смерд поганый, учится буду.

Ты животное о5 пытаешься слиться и свичнутся на слабо. Ты реально не представляешь разницу между нами? Ты никогда меня не переспоришь, никогда у тебя неполучится поймать, никогда ты меня не перебалаболишь.

А теперь прошмандовка я тебе ещё раз объясню. Ты там кукарекал про «у хеадеронли нет перфоманс» - я тебе привел пример, где одинаковый код нереально бустится инлайном и сверткой. Понимаешь животное, суть не в том, чтоб обоссать glibc - я обоссу и тебя и глибц.

действительно. Зачем я рассказывал... У царя бесконечный цикл за 5 секунд прогоняется.

Прошмандовка - ты настолько туп, что ты либо неспособен следить за темой разговора, либо просто несёшь херню, ибо ущербан.

И да, ссанина - ты начал кукарекать, что ты там сливаешь glibc - выкатывай. Ты кукарекал про твой код, который работает везде - выкладывай пример своего кода. Кукарекал - выкладывай.

void qsort(void *base, size_t nmemb, size_t size,

int (*compar)(const void *, const void *)); Подумай животное, почему эта функция будет говно, если её засуть в отдельную еденицу трансляции. Подумал? А теперь подумай что такое lto? Подумал. А теперь если ты подумал, в чем я сомневаюсь - ты понял, что lto - это опытка сделать хеадеронли через линкер.

Если тебе это не понятно, а тебе это не понятно - ты идиот, а ты итак идиот.

anonymous
()
Ответ на: комментарий от BRE

Ну не пиши ерунду. Я тебе выше писал, поставь мсдос, туда борланд с++ 3.1 (все это легко находится в сети) и попробуй сам. :)

А свои домыслы, или страшные сказки рассказанные тебе одноклассниками, про те времена выбрось из головы. Они кроме улыбки переходящей в изумление больше ничего не вызывают. :)

ок, детка.

emulek
()
Ответ на: комментарий от emulek

Вот и умничка, глядишь ты что-то и узнаешь наконец. :)

BRE ★★
()

Всё, я думаю дальнейшее обсуждение бесполезно - тема уже и так скатилась во флейм. Всем, кто попытался помочь мне разобраться в вопросе, спасибо.

P.S. Думаю читать у кого код больше быстрее, кто «ссанина» а кто нет уже мало кому интересно...

Я отмечаю тему как решённую (что условно).

arbv
() автор топика
Ответ на: комментарий от anonymous

int (*compar)(const void *, const void *)); Подумай животное, почему эта функция будет говно, если её засуть в отдельную еденицу трансляции.

Слушай, ты бы рассказал толком - что такое единица трансляции и почему ф-я будет говно. Наверное это не только мне будет интересно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.