@ Уэс прав, никогда не думай, что знаешь, что нужно исправить, пока не получишь доказательстваВ чем я отличаюсь - это метод выяснения.Я и другие используем случайная пауза , которая работает для по этим причинам и здесь короткая демонстрация слайдов и код на C ++, чтобы вы могли видеть, как это работает, если хотите.
Особенность функции printf (или любого выходного) в том, что она тратит A) определенное количество циклов ЦП, создавая буфервыводится, а затем тратит B) определенное количество времени на ожидание, пока система и / или вспомогательное оборудование на самом деле перемещает данные.
Это может быть немного упрощено, но если вы случайно остановите иисследуй состояние, вот что ты видишь.То, что вы сделали, используя большие буферы и SSD-накопитель, это уменьшение B, и это хорошо.Это означает, что оставшееся время, A больше.Вы знаете это.
Теперь из примеров, которые вы найдете в A, вы можете получить подсказку о том, что происходит, если увидите, какие подчиненные процедуры внутри printf обнаруживаются.Обычно printf вызывает что-то вроде vprintf
, чтобы избавиться от списка аргументов переменной, который затем циклически перебирает строку формата, чтобы выяснить, что делать, включая такие вещи, как синтаксический анализ спецификаторов точности. Если похоже, что это то, что он делает, тогда вы знаете, сколько времени уходит на разбор формата. С другой стороны, , если вы видите это внутри подпрограммы, которая копирует строку или форматирует целое число (наряду с обработкой начальных / конечных символов и т. Д.), То вы знаете, что на этом нужно сконцентрироваться. С другой стороны, , если вы видите это внутри подпрограммы, которая выглядит так, как будто она форматирует число с плавающей запятой (что на самом деле довольно сложно), вы знаете, что нужно сконцентрироваться на этом.
Учитывая всечто, ты хочешь знать, что я делаю?Во-первых, я спрашиваю, кто это все равно будет читать?Если никому не нужно читать весь этот текст, почему бы не выкачать его в двоичном виде?Или в шестнадцатеричном виде?Если вы просто пишете двоичный файл, A сжимается до нуля, а когда вы читаете его обратно с другой программой, угадайте что? Нет потерянных битов!