В целом, использование шаблонов C ++ приводит к созданию больших исполняемых файлов, чем выполнение того же кода с макросами? - PullRequest
1 голос
/ 23 апреля 2020

В C, когда вы хотите заняться универсальным c программированием, ваш единственный поддерживаемый язык - macros . Они отлично работают и широко используются, но не рекомендуется, если вместо этого вы можете использовать встроенные функции или обычные функции. (Если вы используете g cc, вы также можете использовать g cc выражений операторов , что позволяет избежать "ошибки" двойной оценки. Пример .)

Однако C ++ покончил с так называемым «злом» макросов, создав шаблонов . Я все еще немного новичок в полномасштабном гиганте c языка C ++ (я считаю, что он должен иметь в 4 или 5 раз больше возможностей и языковых конструкций, чем C), и, как правило, предпочитает макросы или g cc выражений операторов, но меня все больше заставляют использовать шаблоны вместо них. В связи с этим возникает вопрос: в целом, когда вы выполняете обобщенное c программирование на C ++, которое будет производить меньшие исполняемые файлы: макросы или шаблоны?

Если вы говорите, «размер не имеет значения» «Выбирай безопасность, а не размер», я иду впереди go и остановлю тебя прямо там. Для больших компьютеров и прикладного программирования это может быть правдой, но для программирования микроконтроллеров на Arduino, ATTiny85 с 8KB Fla sh для программы или других небольших устройств, это hogwa sh. Размер также имеет значение, поэтому необходимо найти компромисс.

Что создает меньшие исполняемые файлы для одного и того же кода при выполнении обобщенного c программирования? Макросы или шаблоны? Любая дополнительная информация приветствуется.

Связанный:

  1. Делают ли шаблоны c ++ программы медленными?

Примечание:

  1. Некоторые вещи можно только делать с макросами, а НЕ с шаблонами. Возьмем, к примеру, макросы без искаженных имен, а также X макросы. Подробнее о X макросах:
    1. Реальное использование X-Macros
    2. https://www.geeksforgeeks.org/x-macros-in-c/
    3. https://en.wikipedia.org/wiki/X_Macro

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

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

Тем не менее, макросы заменяют вещи на уровне препроцессора, шаблоны делают это на уровне компиляции. Вы можете ускорить компиляцию с помощью макросов, но хороший компилятор оптимизирует их больше, чем макросы. Это означает, что вы можете иметь тот же размер EXE или, возможно, меньше с шаблонами.

Огромные, 99%, проблемы со скоростью или размером в приложении происходят из-за ошибок программистов, а не из-за языка. Очень часто я обнаруживаю, что некоторые фото ресурсы в моем исполняемом файле имеют формат PNG, а не правильный JPG, и вуаля, у меня есть раздувание. Или что я случайно забыл использовать слабый_птр, чтобы разорвать ссылку, и теперь у меня есть два общих указателя, которые совместно используют 100 МБ памяти, которая не будет освобождена. Это почти всегда человеческая ошибка.

0 голосов
/ 23 апреля 2020

... в общем, при выполнении общего c программирования на C ++, которое будет производить меньшие исполняемые файлы: макросы или шаблоны?

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

Если вы пишете что-то гораздо большее с шаблонами - задайте конкретный c вопрос об этом.

Обратите внимание, что ответ на связанный вопрос говорит о множественных не объединяемых экземплярах. Шаблоны функций IME очень часто являются встроенными, и в этом случае они ведут себя очень похоже на макросы, безопасные для типов, и нет никаких причин для увеличения размера встроенного сайта, если в противном случае это тот же код. Например, если вы начнете получать адреса экземпляров шаблонов функций, это изменится.

... C ++ ... обычно предпочитают макросы ... все больше и больше заставляют использовать шаблоны в своих place.

Вам нужно правильно выучить C ++. Возможно, у вас уже есть, но вы не используете шаблоны часто: это все еще оставляет вас в плохом положении, чтобы написать хорошее сравнение.

Возникает вопрос

Нет, это подсказывает вопрос.

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