Guter Stil?!

Hallo Forum!

In letzter Zeit mache ich mir immer häufiger gedanken darüber, was ‚besserer‘ Programmierstil ist, z.B. bei ‚Temporären Objekten‘:

Var 1:

f(int z)
{

for (…)
{
int a = z/2;
int b = z/2;
}

}

Var 2:

f(int z)
{
int temp = z/2;

for (…)
{
int a = temp;
int b = temp;
}

}

Der Vorteil von Var 1 ist, daß ich eine Variable einspare, der Vorteil von 2: ich muß die Berrechnung nur ein mal durchführen.
Ich bin mit den ‚Abgründen‘ der Compiler nicht sonderlich vertraut, aber ich habe mal gelesen, daß temporäre Objekte (also die ‚Ergebnisse‘ von Var 1) sowieso auf dem Stack landen und somit wäre es ja auch nicht so ‚teuer‘ gleich eine Variable mit dem Ergebnis anzulegen (Var 2).

Welche Version ist nun besser?

Ferner habe ich folgendes Problem:

Ich möchte dynamisch ein paar Strings (Zeilenweise) speichern. Ist es hier nun ‚billiger‘ einen kompletten Buffer, z.B. mit char *buff = new char[BAF_MAX]; anzulegen, oder direkt für jede einzelne Zeile den gebrauchten Speicherplatz zu allokieren?

Lösung 1 macht halt Probleme, wenn der Buffer mal ‚ausgehen‘ sollte (und geht wohl auch nicht so wahnsinnig effizient mit dem Speicher um), Lösung 2 benötigt halt bei jeder neuen Zeile ein ‚new‘.

Ich weiß, daß diese Fragen für einen Hobbyprogrammierer angesichts der heutigen PCs eher theoretischer Natur sind, aber es interessiert mich halt :wink:

Hallo Johannes,

ich würde mal sagen beide Varianten sind kein schlechter Stil,
Nr. 2 ist halt etwas schneller, aber bei den heutigen µP ist das
egal.

Ich möchte dynamisch ein paar Strings (Zeilenweise) speichern.
Ist es hier nun ‚billiger‘ einen kompletten Buffer, z.B. mit
char *buff = new char[BAF_MAX]; anzulegen, oder direkt für
jede einzelne Zeile den gebrauchten Speicherplatz zu
allokieren?

Wenn Du genau weißt, wieviele Zeilen Du benötigst, würde ich alles auf einmal holen, ansonsten eben zeilenweise.
Billiger ist es alles auf einmal zu reservieren, da new langsam ist, aber hier gilt wieder das oben gesagte für die heutigen µP.

Gruß Patrick

Ich denke, dass bei heutigen Maschinen Speicher- und Leistungsoptimierung eher für die Katz ist, viel wichtiger ist Lesbarkeit und Verständlichkeit des Codes.

Von einem Hack der dir ein paar Bytes oder Millisekunden spart, den aber nachher keiner mehr versteht geschweige den sich anfassen traut hat auch keiner was.

Grüße, Robert

Hi,

ohne mich mit den Details der Compiler-optimierung auszukennen:
Sowas sollte heute bon selber optimiert werden. Der Compiler erkennt, das du eine Konstante initialisierst, und wird da kein
temporäres Objekt anlegen. Zumindest nicht bei den eingebauten typen. Was anderes ist das nat., wenn du eigene Objete definierst, aber dann wirds eh komplizierter.

MfG Diez

Var 1:

f(int z)
{

for (…)
{
int a = z/2;
int b = z/2;
}

}

Var 2:

f(int z)
{
int temp = z/2;

for (…)
{
int a = temp;
int b = temp;
}

}

Guter Stil?! -Wozu sollen Andere Programme lesen,
die nichts taugen?

Ich würde nicht alles auf schnelle µPs abschieben. Ein großens Softwarehaus bekommt von den Hardwareherstellern dafür Geld. Der kleine Programmierer kriegt nur schelte. Wenn jede Variable nur ein paar µsec kürzer Verarbeitet wird, kommen am Ende ganze Sekunden heraus.

Hatte selber letztens ein dreckiges Programm. Mit einem Graphics-Server von 1992! Wird zur Zeit teuerst an Schulen verkauft. Das Programm startete auf einem PII-400 mit 2 glatten Minuten!

Klickt Euch doch eurer Visual-irgendwas zusammen. Ich hoffe, dass ich auch noch Programme von Leuten benutzen kann, die auch mal, wenns kritisch wird, ein Kilobyte Assembler einbinden.

Hallo Till,

>>Ich würde nicht alles auf schnelle µPs abschieben.

Hat auch keiner getan. Ursprünglich ging es um einen Puffer
für Texteingaben, ich denke in einem Programm gibt es wichtigere
Stellen für Optimierungen, als eine billige Texteingabe.

>>Klickt Euch doch eurer Visual-irgendwas zusammen. Ich hoffe,
>>dass ich auch noch Programme von Leuten benutzen kann, die
>>auch mal, wenns kritisch wird, ein Kilobyte Assembler
>>einbinden.

Du wirst es nicht glauben, aber ich optimiere meine Programme
am Schluß auch mit Assembler, nur da wo es mir unnötig erscheint
rühre ich keinen Finger, weil es einfach Zeitverschwendung ist.
Würde mein Programm zwei Minuten benötigen, um zu starten, würde ich es auch nicht ohne Optimierung aus der Hand geben. Ich denke aber, daß das von Dir erwähnte Programm nicht für einen PII geschrieben wurde, und dadurch der Code auch nicht unbedingt effizient ausgeführt wird, wie auch immer zwei Minuten sind heftig.

Gruß Patrick