Thread C, malloc, realloc, int arrays und segfaults (6 answers)
Opened by FoolAck at 2009-01-27 05:24

murphy
 2009-01-27 17:10
#118402 #118402
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
esskar+2009-01-27 07:59:51--
size *= 2; wird schnell groß, dass ist dir klar, oder? würde es auch fast so schreiben size += size;


Es ist aber sinnvoll, den Speicherpuffer exponentiell zu vergroessern, um die Anzahl der Allokationen und die Fragmentierung des Speichers moeglichst gering zu halten. Fast jede Implementation dynamisch wachsender Arrays arbeitet so.

size += size zu schreiben halte ich fuer wenig sinnvoll. Wenn man hier unbedingt von Hand optimieren und sich nicht darauf verlassen will, dass der Compiler sowieso diesen Code erzeugt, dann sollte man wohl eher size <<= 1 schreiben, was mit Sicherheit eine schnellere Instruktion ist als die Addition oder Multiplikation.

Noch besser als einen dynamisch wachsenden Puffer zu verwenden waere es allerdings, einfach die Groesse der einzulesenden Datei zu bestimmen und direkt einen Puffer passender Groesse zu allozieren.

Wenn ferner eine Konversion der Daten in der Datei in eine spezielle Repreasentation im Arbeitsspeicher unnoetig ist -- was hier der Fall zu sein scheint, denn die Konversion von Bytes in Words ist voellig ueberfluessig -- dann empfiehlt es sich, die Datei einfach in den Speicher zu mappen anstatt sie einzulesen.
When C++ is your hammer, every problem looks like your thumb.

View full thread C, malloc, realloc, int arrays und segfaults