Это зависит от того, для чего вам нужен буфер.
Вам действительно нужно очищать его после каждой итерации, или, может быть, \0
символа в конце будет достаточно, чтобы отметить конец строки? В конце концов, это то, что используют различные библиотеки str
.
Если вам действительно нужно очистить его, вы можете использовать bzero()
. Конечно, malloc'ing и free'ing на каждой итерации - пустая трата ресурсов, так как вы можете с радостью повторно использовать буфер.
Другая проблема возникнет, если вы будете распараллеливать цикл for, т. Е. Использовать несколько одновременно работающих потоков.
Простой, реальный пример: использование ведра для переноски воды. Предположим, вам нужно совершить несколько поездок с этим ковшом: имеет ли смысл взять его, использовать, опустить, снова собрать, использовать и т. Д.? Вы можете повторно использовать ведро столько раз, сколько возможно.
Если, с другой стороны, корзина нужна вам и большему количеству людей, либо вы организуете доступ к корзине, либо вам нужно больше корзин.
Последнее предложение: не беспокойтесь о выступлениях сейчас . Говорят, что ранняя оптимизация - корень всего зла, и вы скоро поймете, почему.
Во-первых, поймите проблему: напишите код, который можно выбросить. Эксперимент.
Во-вторых, проверьте это. Убедитесь, что он делает то, что вам нужно.
В-третьих, оптимизируйте это. Сделайте цикл десять тысяч раз и измерьте, сколько времени это займет. Затем переместите malloc наружу и повторите измерение (используйте команду оболочки time
, если в UNIX).
В-четвертых, перепишите его, потому что ваш первый эксперимент, скорее всего, будет путаницей патчей неработающего кода.
Промыть, повторить.
ps: развлекайся тем временем. Это должно быть интересно, а не расстраивать.