Анализ занимаемой памяти кода библиотеки

Допустим, у нас есть некоторая библиотека, скомпилированная в файл .a. После этого эта библиотека связывается с другим кодом в некоторый исполняемый файл .exe. Размер файла .a составляет 6 МБ, а размер файла .exe - 3 МБ. Очевидным объяснением этого является то, что компоновщик выбросил неиспользуемый код из библиотеки. Что я хочу знать, так это реальный размер кода библиотеки в конечном исполняемом файле.


person ashrugger    schedule 19.06.2010    source источник


Ответы (2)


Проверьте параметры компоновщика. У компоновщиков обычно есть возможность сгенерировать файл карты. Это список функций, связанных с финальным изображением, и откуда они взялись. Похоже, вы используете gcc, используйте параметр -map.

person Hans Passant    schedule 19.06.2010

В библиотеке реализовано множество функций. Некоторые из них используют exe. Лайкер добавляет в exe только код функций, которые использует exe.

person Oleg    schedule 19.06.2010
comment
Это то, что я сказал. Очевидное объяснение этому состоит в том, что компоновщик выбросил неиспользуемый код из библиотеки. - person ashrugger; 19.06.2010
comment
Но это ДОЛЖНО быть так задумано, если вы используете файл LIB. Если используется большой LIB и используется только одна функция из LIB, то в EXE будет добавлен только один OBJ из LIB с его зависимостями. С другой стороны, если вы поместите много функций в один файл OBJ и свяжете его со своим приложением, весь OBJ будет добавлен в EXE. Что касается дополнительных переключателей, то из импортированного файла OBJ можно удалить неиспользуемые функции. - person Oleg; 19.06.2010
comment
Например, в en.wikipedia.org/wiki/Static_linking вы можете прочитать следующее. достаточно включить те части библиотеки, на которые прямо или косвенно ссылается целевой исполняемый файл (или целевая библиотека). В динамических библиотеках загружается вся библиотека, так как заранее неизвестно, какие функции будут вызываться приложениями. Существенно ли это преимущество на практике, зависит от структуры библиотеки. - person Oleg; 19.06.2010