Здесь небрежно написанный шаблон, там чрезмерная встраивание — на C++ слишком легко написать раздутый код. В принципе, рефакторинг для уменьшения этого раздувания не так уж и сложен. Проблема заключается в отслеживании шаблонов и встроенных строк, нарушающих правила, - отслеживании тех элементов, которые вызывают реальное раздувание в реальных программах.
Принимая это во внимание, а также поскольку я уверен, что мои библиотеки немного более склонны к раздуванию, чем должны быть, мне было интересно, есть ли какие-либо инструменты, которые могут автоматически отслеживать этих наихудших нарушителей - т. е. определять те элементы, которые вносят наибольший вклад (включая все их повторные создания экземпляров и вызовы) в размер конкретной цели.
На данный момент меня не очень интересует производительность — все дело в размере исполняемого файла.
Есть ли какие-либо инструменты для этой работы, которые можно использовать в Windows и которые подходят для MinGW GCC или Visual Studio?
РЕДАКТИРОВАТЬ – некоторый контекст
У меня есть набор шаблоны многопутевого дерева, которые заменяют стандартные контейнеры красно-черного дерева. Они написаны как обертки вокруг нетипобезопасного нешаблонного кода, но они также были написаны давным-давно и в качестве эксперимента «улучшение дружелюбия к кэшу повысит реальную производительность». Дело в том, что они на самом деле не были написаны для долгосрочного использования.
Однако, поскольку они поддерживают некоторые удобные приемы (поиск на основе пользовательских сравнений/частичных ключей, эффективный доступ по подписке, поиск наименьшего неиспользуемого ключа), они в конечном итоге стали использоваться практически везде в моем коде. Сейчас я почти никогда не использую std::map.
Поверх них у меня есть несколько более сложных контейнеров, таких как двусторонние карты. Помимо этого, у меня есть классы деревьев и орграфов. Вдобавок ко всему...
Используя файлы карт, я мог отслеживать, не вызывают ли невстроенные методы шаблонов раздувание. Это просто вопрос поиска всех экземпляров определенного метода и добавления размеров. А как насчет неразумно встроенных методов? В конце концов, шаблоны задумывались как тонкие оболочки вокруг нешаблонного кода, но исторически моя способность судить, должно ли что-то быть встроено или нет, не была очень надежной. Влияние этих встроенных шаблонов на раздувание не так-то легко измерить.
Я имею некоторое представление о том, какие методы широко используются, но это известная ошибка оптимизации без профилирования.
Подробнее здесь: https://stackoverflow.com/questions/314 ... bloat-in-c