Там может иметь существенные различия в скорости выполнения в зависимости от того, как объектный код размещен в памяти.В общем, вы хотите, чтобы горячие функции были близко друг к другу, чтобы они не смешивались с холодными функциями, и чтобы ваши Icache
и TLB
не были загрязнены холодными функциями.Однако маловероятно, что это затронет вас.
Скорее всего, у вас есть некоторые символы, которые разрешаются одним способом в «быстром» исполняемом файле и другим способом в «медленном» исполняемом файле.Порядок библиотек архивов и объектных файлов в командной строке имеет значение , и вы можете в конечном итоге получить некоторый объект из ar1.a
по "быстрой" ссылке, тогда как вы извлечете эквивалентный объект из ar2.a
в "медленной" ссылке.Возможно, есть неоптимизированный код в ar2.a
?
Запуск nm -A ar1.a ar2.a
и проверка на наличие каких-либо символов, присутствующих в обоих, будет первым шагом.Затем вы можете попросить компоновщика создать карту ссылок (с -Wl,-M,map.out
) и проверить, откуда эти символы на самом деле берутся в двух ссылках.