Существуют ли какие-либо инструменты для отслеживания раздувания в C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Существуют ли какие-либо инструменты для отслеживания раздувания в C++?

Сообщение Anonymous »

Здесь небрежно написанный шаблон, там чрезмерная встраивание — на C++ слишком легко написать раздутый код. В принципе, рефакторинг для уменьшения этого раздувания не так уж и сложен. Проблема заключается в отслеживании шаблонов и встроенных строк, нарушающих правила, - отслеживании тех элементов, которые вызывают реальное раздувание в реальных программах.

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

На данный момент меня не очень интересует производительность — все дело в размере исполняемого файла.

Есть ли какие-либо инструменты для этой работы, которые можно использовать в Windows и которые подходят для MinGW GCC или Visual Studio?

РЕДАКТИРОВАТЬ – некоторый контекст

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

Однако, поскольку они поддерживают некоторые удобные приемы (поиск на основе пользовательских сравнений/частичных ключей, эффективный доступ по подписке, поиск наименьшего неиспользуемого ключа), они в конечном итоге стали использоваться практически везде в моем коде. Сейчас я почти никогда не использую std::map.

Поверх них у меня есть несколько более сложных контейнеров, таких как двусторонние карты. Помимо этого, у меня есть классы деревьев и орграфов. Вдобавок ко всему...

Используя файлы карт, я мог отслеживать, не вызывают ли невстроенные методы шаблонов раздувание. Это просто вопрос поиска всех экземпляров определенного метода и добавления размеров. А как насчет неразумно встроенных методов? В конце концов, шаблоны задумывались как тонкие оболочки вокруг нешаблонного кода, но исторически моя способность судить, должно ли что-то быть встроено или нет, не была очень надежной. Влияние этих встроенных шаблонов на раздувание не так-то легко измерить.

Я имею некоторое представление о том, какие методы широко используются, но это известная ошибка оптимизации без профилирования.

Подробнее здесь: https://stackoverflow.com/questions/314 ... bloat-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»