Почему использование boost увеличивает размер файла так сильно? - PullRequest
4 голосов
/ 23 января 2010

Я заметил, что когда я использую функцию повышения, размер приложения увеличивается примерно на 0,1 - .3 МБ. Это может показаться не таким уж большим, но по сравнению с использованием других внешних библиотек это так (по крайней мере, для меня). Почему это?

Ответы [ 4 ]

4 голосов
/ 23 января 2010

Boost использует шаблоны везде . Эти шаблоны могут быть созданы несколько раз с одинаковыми параметрами. Достаточно умный компоновщик выбросит все, кроме одной копии. Однако не все линкеры достаточно умны. Кроме того, шаблоны иногда создаются неявно, и даже трудно определить, сколько раз они были созданы.

1 голос
/ 23 января 2010

«так много» - это сравнительный термин, и я боюсь, что вы сравниваете яблоки с апельсинами. То, что другие библиотеки меньше, не означает, что Boost такой же маленький. Посмотрите на огромное количество работы, которую Boost делает для вас!

Я сомневаюсь, что создание пользовательской библиотеки с той же функциональностью будет значительно меньшего размера. Единственное правильное сравнение - «библиотека Boost, которая делает X» против «другой библиотеки, которая делает X». Не «библиотека Boost, которая делает X», а «Другая библиотека, которая делает Y».

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

0 голосов
/ 29 декабря 2010

Повышение состоит в основном из очень обобщенных и иногда довольно сложных шаблонов, что означает, что типы и функции создаются компилятором в соответствии с требованиями использования, а не просто путем объявления. Другими словами, небольшое количество исходного кода может произвести значительное количество объектного кода для выполнения всех вариаций объявленных или используемых шаблонов. Повышение также зависит от стандартных библиотек, включая эти зависимости. Тем не менее, наиболее значимым вкладом является тот факт, что исходный код Boost существует почти в основном во включаемых файлах. Включение стандартных файлов включения c (за пределами STL) обычно включает очень мало исходного кода и содержит в основном прототипы, небольшие макросы или объявления типов без их реализаций. Boost содержит большинство своих реализаций в своем включаемом файле.

0 голосов
/ 23 января 2010

Все зависит от того, как оно используется. Поскольку Boost представляет собой набор шаблонов, он приводит к компиляции набора функций-членов для каждого используемого типа. Если вы используете boost с типами n , функции-члены определяются (шаблонами C ++) n раз, по одному для каждого типа.

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