История изменений
Исправление redbaron, (текущая версия) :
Приведенный пример крайне синтетический, использовал int только, чтобы создать разные типы. В реальном коде на который я смотрю часть методов класса-шаблона генерирует идентичный код, часть нет.
Пошел другим путем - начал искать похожее в документации к MSVC и нашлось нечто «ICF», которое на бинарном уровне мержит функции с одинаковыми инструкциями.
После нехитрого гугл кун-фу выяснилось, что и на нашей улице может быть праздник.
- Ставим gold
- Компилируем с
mkdir -p /tmp/gold ln -s /usr/bin/gold /tmp/gold/ld g++ -B/tmp/gold -Wl,--icf=all -O3 -ffunction-sections -fdata-sections -o /tmp/b /tmp/b.cpp
- В objdump видим, что создался только один экземпляр функции.
Исходная версия redbaron, :
Приведенный пример крайне синтетический, использовал int только, чтобы создать разные типы. В реальном коде на который я смотрю часть методов класса-шаблона генерирует идентичный код, часть нет.
Пошел другим путем - начал искать похожее в документации к MSVC и нашлось нечто «ICF», которое на бинарном уровне мержит функции с одинаковыми инструкциями.
После нехитрого гугл кун-фу выяснилось, что и на нашей улице может быть праздник.
1) Ставим gold 2) Компилируем с
mkdir -p /tmp/gold
ln -s /usr/bin/gold /tmp/gold/ld
g++ -B/tmp/gold -Wl,--icf=all -O3 -ffunction-sections -fdata-sections -o /tmp/b /tmp/b.cpp