Включение оптимизации всей программы в некоторой статической библиотеке значительно увеличивает размер библиотеки! - PullRequest
9 голосов
/ 31 декабря 2010

В Visual Studio 2010 у меня есть проект статической библиотеки C / C ++.Когда я включаю опцию оптимизация всей программы в режиме release , я получаю файл .lib, размер которого превышает 90 МБ!Когда я отключаю эту опцию, размер уменьшается до 24 МБ.Эта библиотека содержит сотни классов, сгенерированных с помощью прото-буфера.

Мне интересно, почему эта опция увеличивает размер?При каких условиях мы должны его отключить?

Редактировать: MO изменен на МБ благодаря chrisaycock

Ответы [ 3 ]

17 голосов
/ 31 декабря 2010

Вся оптимизация программы означает, что все не оптимизировано до стадии соединения.

Размер статической библиотеки не на что смотреть. В этом режиме статическая библиотека может быть полна дополнительной информации, необходимой для финальной стадии оптимизации / соединения. Если вы не выполняли оптимизацию всей программы, то эту информацию можно было бы выбросить после создания статической библиотеки, но когда вы это делаете, эту информацию нужно хранить до конца.

Вместо этого посмотрите размер конечного исполняемого файла. (Это может все еще увеличиться, но это не должно увеличиться таким огромным количеством.)

8 голосов
/ 31 декабря 2010

Мне интересно, почему этот вариант увеличивает размер?

Поскольку вы создаете статическую библиотеку, а не исполняемый файл. Оптимизация всей программы оставляет большую часть оптимизации до время ссылки (вместо время компиляции ) Таким образом, ваша библиотека содержит неоптимизированное «промежуточное представление», а не ассемблерный код.

При каких условиях мы должны повернуть его от

Для статических библиотек, как вы только что обнаружили.

4 голосов
/ 31 декабря 2010

Включение оптимизации всей программы позволяет компоновщику встроенных функций, определенных в файлах реализации (* .cpp).Использование одной и той же функции во многих местах может значительно увеличить размер двоичного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...