Я начинаю программист и я читал, что printf()
очень изощренно функционирует очень медленно и потребляет много циклов процессора. Поэтому я хочу знать, есть ли какая-либо функция, которая существует в стандартной чистой библиотеке c и быстрее, чем printf()
или нет, и когда использовать эту функцию и когда ее не использовать. Моя цель состоит в том, чтобы написать эффективный код, который может работать на любом компьютере и/или встроенной системыфункция, которая быстрее, чем printf
ответ
на самом деле я обнаружил, что write()
является самой быстрой альтернативой printf()
я написал 2 маленьких программ, которые печатает привет мир на стандартное первый один
#include <stdio.h>
#include <string.h>
#include <unistd.h> int main() {
char* h = "hello world\n";
for (int i=0; i < 100000; i++) write(0,h,strlen(h));
}
и второй один
#include <stdio.h>
int main() {
char* x = "hello world\n";
for (int i =0;i<100000; i++) printf("%s",x); }
и сравнили время работы 2-х программ на моем компьютере компьютер , первая из которых завершена в 2.740s , а вторая прекращена в 3.071s
Если вам нужна производительность, не называйте 'write',' fwrite' намного лучше. 'write' - это системный вызов вызова, который является mucbh более дорогостоящим, чем вызов библиотечной функции, такой как' fwrite'. Позднее вы предоставите вам буферизацию, которая экономит вам несколько дорогостоящих «писем». –
Есть причины, которые препятствуют использованию printf.
1) printf является функцией и вряд ли может быть встроенным, так как функция нарушает оптимизацию компилятора кода вокруг него. Если у вас есть цикл, который делает много тяжелой работы, и вы хотите, чтобы компилятор делал хорошую работу, оптимизируя его, тогда не вызывайте никакой неотъемлемой функции внутри этого цикла.
2) Путь stdio-маршрута из контента зависит от реализации и может быть очень медленным. Если вы используете панель разработки для запуска кода, то stdio обычно реализуется через JTAG. В этом случае не только printf, но и все через stdio происходят крайне медленно. Если вы слишком сильно используете printf, вы легко достигнете предела времени.
3) Ваша целевая платформа может не реализовать stdio. Это распространено для встроенной платформы, потому что они EMBEDDED в чем-то еще и могут не иметь простого способа маршрутизации содержимого в или из.
На ваш вопрос: да и нет.
Да: есть утилиты трассировки, которые разработаны как легкие и быстрые и могут использоваться как более быстрая альтернатива printf, например, GT_TRACE от Texas Instruments для их DPS. В отличие от printf, трассировка может быть легко отключена во время выполнения и времени компиляции. Когда они выключены, они занимают очень мало времени.
No: следовые утилиты не являются стандартными C. Они, как правило, являются частью SDK вашей целевой платформы
Нижняя линия: на данный момент, не думаю об этом слишком много. Замените printfs трассировкой при переходе на встроенную платформу, если это необходимо.
- 1. Функция onSelect быстрее, чем нажимать
- 2. Функция карты, которая должна быть быстрее
- 3. Почему функция переопределения быстрее, чем вызов первой?
- 4. Функция быстрее, чем применяется (..., ..., диапазон) в R
- 5. Функция вызова быстрее, чем на лету расчета?
- 6. Почему strcmp намного быстрее, чем моя функция?
- 7. Почему функция fwrite libc быстрее, чем функция записи в syscall?
- 8. Почему функция Objective-C sqrtf() быстрее, чем функция, которая просто возвращает значение?
- 9. Printf функция
- 10. Какая функция растет быстрее
- 11. Быстрее, чем rand()?
- 12. Julia: Базовая функция на 10 000x быстрее, чем аналогичная функция
- 13. C++: Почему регулярная функция работает быстрее, чем функция Inline?
- 14. Оптимизация CSS, которая быстрее
- 15. _mm_sad_epu8 быстрее, чем _mm_sad_pu8
- 16. Java быстрее, чем C
- 17. wrapper printf функция, которая фильтрует в соответствии с предпочтениями пользователя
- 18. есть функция в семействе printf, которая возвращает часть строки?
- 19. Является ли функция задержки в единстве быстрее, чем WaitForSeconds()?
- 20. Java быстрее, чем C?
- 21. DB-копия в MySQL, которая быстрее, чем mysqldump?
- 22. Printf выход шестнадцатеричное значение больше, чем должно
- 23. Printf Функция Печать более частей Struct массива, чем задумывалось
- 24. Действие быстрее, чем вызов метода?
- 25. UserDefined функция Printf
- 26. Preproccessed функция Printf
- 27. Функция printf() вызывает segfault
- 28. PHP, Printf, Функция Sprintf
- 29. Функция printf() действует странно
- 30. printf() функция не работает
Это зависит от того, какой будет выход. 'printf' форматирует вывод, вы тоже хотите отформатировать вывод? –
Вы измеряли, что 'printf' медленный, или вы просто разбираете вещи, услышанные из других мест? Не пытайтесь оптимизировать, пока у вас нет возможности оптимизировать. – cnicutar
Если вы новичок, не беспокойтесь о производительности. действительно, это неправильный разум. –