Уменьшение размера кода C ++ - PullRequest
3 голосов
/ 01 июня 2011

Я работаю над динамическим языком (который компилируется в C ++) для микроконтроллеров, будучи парнем из CS, я решил сначала сделать это правильно, а потом беспокоиться об оптимизации.Ниже описывается структура моей объектной системы:



Base (Interface)
|
|---- Number (Interface)
|      |
|      |-- Int
|      |-- Float
|
|---- Char
|
|---- Sequence (Interface)
|      |
|      |-- LinkedList
|
|---- Function (Interface)
      |
      |-- Built-in Functions (Functors)

Теперь, когда все работает, размер сгенерированного кода стал проблемой, каждая операция должна быть представлена ​​функтором, (+, - while, for и т. Д...) так что я предполагаю, что это приводит к увеличению размера кода, или я передаю все как базовый класс, а затем преобразую по мере необходимости, поэтому у меня есть много приведений, в настоящее время простой цикл включения / выключения светодиодов стоит 15 кбайт, хотяне использовать все типы объектов (6 функторов + 4 целых числа).

Я пробовал различные варианты avr-gcc, которые не уменьшали размер кода.Поэтому мне интересно, как я могу определить, какая часть кода занимает так много места?

Ответы [ 2 ]

7 голосов
/ 01 июня 2011

Во время шага связывания вы должны сделать так, чтобы avr-gcc сгенерировал файл карты, чтобы вы могли посмотреть на него и посмотреть, что занимает столько места.

Обязательно используйте параметр компиляции -ffunction-sectionsи опция компоновщика -Wl,-gc-sections для удаления неиспользуемых функций из двоичного файла.

Какие функции C ++ вы используете?Некоторые из них (например, классы и пространства имен) дешевы, а другие очень дороги (например, обработка исключений).Интерфейсы и виртуальные функции будут дороже, чем просто иметь классы и подклассы.

Однажды я увидел хороший доклад под названием "Неэффективность C ++: факты или вымысел?"производится IAR.Он прошел через каждую расширенную функцию C ++ и назначил ей цену.Он был в основном ориентирован на людей, разрабатывающих для архитектуры ARM, но он все еще может быть ценным для вас.Вот слайды: http://www.carnica -techology.com / download / Неэффективность C ++. Pdf

1 голос
/ 01 июня 2011

Тривиальное замечание, помимо поддержки предложений Дэвида: убедитесь, что вы не компилируете в режиме отладки и что вы удалили все символы из вашего исполняемого файла, чтобы уменьшить его размер до минимума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...