Дублирование объектного кода шаблона - PullRequest
0 голосов
/ 26 апреля 2018

Первое: нет, я не спрашиваю о специализациях шаблонов.

Предположим следующий пример: у меня есть файл заголовка с универсальным методом:

template <typename T>
T foo(T bar) {
    return bar;
}

Во втором файле под названием file1.cpp я использую этот метод как foo<int>(42);. Теперь, насколько я понимаю, компилятор сгенерирует объектный код для метода шаблона в сгенерированном file1.o объектном файле.

Теперь, если у меня есть 10000 файлов, которые используют этот метод с параметром шаблона int, компилятор сгенерирует тот же код 10000 раз, поскольку генерация объектного кода не зависит от всех других объектов (по крайней мере, я так думаю) ).

У меня такой вопрос: как только компоновщик объединит все 10000 объектных файлов в мой двоичный файл, скопирует ли он один и тот же код 10000 раз или он может обнаружить это и включить метод только один раз (для каждого типа шаблона)?

...