Es hängt davon ab, wofür Sie den Puffer benötigen.
Müssen Sie es wirklich nach jeder Iteration löschen oder vielleicht ein \0
Zeichen am Ende würde ausreichen, um das Ende einer Zeichenfolge zu markieren? Nach all dem benutzen die verschiedenen Bibliotheksaufrufe str
.
Wenn Sie es wirklich löschen müssen, können Sie bzero()
verwenden. Sicheres Mallozieren und Freigeben bei jeder Iteration ist eine Verschwendung von Ressourcen, da Sie den Puffer problemlos wiederverwenden können.
Ein anderes Problem würde auftreten, wenn Sie die for-Schleife parallelisieren würden, d. H. Mehrere gleichzeitige Threads verwenden, die es verwenden.
Einfaches Beispiel aus der Praxis: Mit einem Eimer Wasser transportieren. Angenommen, Sie müssen mehrere Trips mit diesem Bucket machen: Wäre es sinnvoll, es aufzuheben, zu benutzen, abzulegen, wieder aufzuheben, zu benutzen, etc ...? Sie können den Bucket so oft wie möglich erneut verwenden. Wenn andererseits der Bucket von Ihnen und mehr Personen verwendet werden muss, organisieren Sie entweder den Zugriff auf den Bucket oder benötigen mehr Buckets.
Letzter Vorschlag: Mach dir keine Sorgen über die Leistungen jetzt. Sie sagen, dass frühe Optimierung die Wurzel allen Übels ist, und du wirst bald verstehen, warum.
Erstens, verstehen Sie das Problem: Schreiben Sie Code, der weggeworfen werden kann. Experiment. Zweitens, testen Sie es. Stellen Sie sicher, dass es das tut, was Sie brauchen. Drittens optimieren Sie es. Lassen Sie die Schleife zehntausend Mal laufen und messen Sie, wie lange es dauert. Verschieben Sie dann das Malloc nach draußen und messen Sie erneut (verwenden Sie den Shell-Befehl time
, falls unter UNIX). Viertens, schreiben Sie es um, weil Ihr erstes Experiment höchstwahrscheinlich ein Durcheinander von Patches aus try-retry-Code sein wird, der nicht funktioniert.
Spülen, wiederholen.
ps: habe Spaß in der Zwischenzeit. Es soll interessant und nicht frustrierend sein.
Sie nicht frei außerhalb der Schleife aufrufen können, wenn Sie malloc im Inneren anrufen, oder Sie den Speicher für alle, aber die malloc aus der letzten Iteration auslaufen. Sie können jedoch realloc anstelle von malloc verwenden und dann außerhalb freigeben. – Cascabel
@Jefromi: Ich denke, du solltest diesen Kommentar eine Antwort geben. –
Ihr Englisch ist in Ordnung - es ist in der Tat besser als die meisten Neulinge Englisch auf SO. –