LINUX.ORG.RU

История изменений

Исправление 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
3) В objdump видим, что создался только один экземпляр функции.