Да, тебе это нужно .... наверное.Если вам это не нужно, то статическое связывание безвредно.Вы можете определить, нужно ли вам это, используя опцию -t
link trace (я думаю).
Есть несколько вещей, которые вы не можете сделать в одной инструкции (обычно такие вещи, как 64-битные операции на 32-битнойархитектуры).Эти вещи могут быть выполнены, но если они используют нетривиальное количество инструкций, тогда более экономно использовать их все в одном месте.
Когда вы отключаете оптимизацию с помощью -O0
(это фактически значение по умолчанию)в любом случае) тогда GCC почти всегда использует процедуры libgcc.
Когда вы включаете оптимизацию speed , тогда GCC может выбрать вставку последовательности команд непосредственно в код (если он знает, как).Вы можете обнаружить, что он не использует ни одну из версий libgcc - он, безусловно, будет использовать меньше вызовов libgcc.
Когда вы включаете оптимизацию size , тогда GCC может предпочесть вызов функции или не- это зависит от того, что разработчики GCC считают лучшим соотношением скорости / размера в каждом конкретном случае.Обратите внимание, что даже когда вы указываете оптимизировать скорость, компилятор может решить, что некоторые функции вряд ли будут использоваться, и оптимизировать их по размеру - даже больше, если вы используете PGO.
По сути, вы можете думать об этом так же, как memcpy
или функции математической библиотеки: компилятор встроит функции, которые он считает полезными, и вызовет библиотечные функции в противном случае.Компилятор может «встроить» стандартные функции и функцию libgcc, не глядя на определение библиотеки, конечно - он просто «знает», что они делают.
Использование статической или динамической libgcc - интересный компромисс.С одной стороны, динамическая (разделяемая) библиотека будет использовать меньше памяти во всей вашей системе, и, скорее всего, будет кэширована и т. Д. С другой стороны, статическая libgcc имеет меньшие накладные расходы на вызов.
Но самое главное - это совместимость.Очевидно, что библиотека libgcc должна присутствовать для запуска вашей программы, но она также должна быть совместимой версия .Вы работаете в дистрибутиве Linux со стабильной версией GCC, но в остальном статические линки безопаснее.
Надеюсь, это ответит на ваши вопросы.