производительность printf: лучше использовать «% d» или «% c» для однозначных чисел - PullRequest
0 голосов
/ 28 февраля 2019

Я печатаю информацию о структуре, которая содержит только информацию, которая будет состоять из одной цифры (небольшие индексы и символы, которые в основном действуют как bool).

Я хочу, чтобы мои printf вызовы были настолько эффективныминасколько это возможно.Поэтому было бы лучше использовать обычные спецификаторы формата %i / %d, или лучше использовать %c и добавить к номеру 0x30 ('0'), так как тогда не должно быть необходимостиПодойдет ли форматирование для printf?

Редактирование / уточнение: Я профилировал несколько небольших программ, которые пробуют обе техники, и %c может быть быстрее.Если бы это было для производственного кода, я бы просто придерживался %d, но это специально для скоростных соревнований.(извините, потому что раньше это было непонятно).

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

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

Код должен быть в порядке важности:

  1. Правильно - он делает все, что должен, и ничего, что он не должен делать;
  2. Надежный - он не должен падать и умирать, если кто-то смотрит на это смешно;
  3. Безопасный - это не вредоносный вектор, он не предоставляет никаких данных, которые он не должен;
  4. Ремонтопригоден - некоторым беднякам в конечном итоге придется изменить этот код, чтобы добавить функциональность (или исправить дефект);
  5. Эффективно - это не должно занимать больше места или времени, чем необходимодля выполнения данной задачи, которая часто определяется выбором алгоритма и структур данных больше, чем какая-либо конкретная микрооптимизация.

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

0 голосов
/ 28 февраля 2019

Поскольку вы печатаете целые числа, используйте %d, что улучшает удобочитаемость.

Использование одного над другим не окажет существенного влияния на производительность.

Если в вашем приложенииУзкое место на самом деле является этапом печати, а затем рассмотреть возможность использования другого подхода, чем printf().Некоторые идеи: использовать fwrite () , optimize stdout или POSIX write () , как предложено @YoYoYonnY.

Как правило, печать в stdout относительно медленная, по сравнению с вычислениями, например ...

HyperTip: преждевременная оптимизация - корень зла - Д. Кнут.

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