Hi Stefan!
Ich werde versuchen ein erwachsener Programmierer zu werden
Viel Erfolg!
Tja, das nächste mal mache ich [Ironie]-Tags drumrum, dann kapiert es jeder.
Ja ein Struct per Value ist schlecht, es verbraucht Rechenzeit
und die Größe des Stacks ist nicht mehr vorhersehbar (oder
schwer). Wenn die rufende Funktion den Inhalt der Struct nicht
kennen und verändern soll warum muß sie dann alle Member
ständig kopieren???
Ich will dich ja nicht aus deiner kleinen heilen PC-Welt holen, aber es gibt Systeme, da ist Speicher-allozieren aufwendiger als statische Objekte, und ein großes Problem ist der fragmentierte Speicher, weshalb, wenn möglich, statische Objekte genutzt werden sollten.
Wenn die Programmierer nicht mal fopen, „mach und tu“, fclose
hinschreiben können, ja dann hast du Speicherlöcher. Ein
„Init“ und „Exit“ ist das gleiche wie ein malloc und free. Das
hat nichts mit einem oder hundert Programmierern zu tun,
sondern mit der Durchgängigkeit der Interfaces. Ich würde
niemals etwas hinschreiben wo die rufende Funktion den
Speicher freigeben muß, es gibt ein „Exit“.
Auch da will ich dich nicht aus deiner heilen Welt holen, aber man kann sich leider seine Mitarbeiter nicht immer Aussuchen und es gibt genug Leute, die mal fopen, „mach und tu“, fclose nicht machen, aus welchen Gründen auch immer. Man muss leider oft genug mit der Dummheit anderer rechnen… (Aber was solls, dafür sind die in den asiatischen Ländern auch billiger, was interessiert, ob da viele Graupen bei sind…)
Falls du allerdings darauf hinaus möchtest, das die Struct auf
dem Stack angelegt wird und der Programmierer über ein free
(exit) nicht nachdenken muß, da der return den Stack schon
aufräumen wird, hast du wohl recht.
Diese Denke beschehrt uns gerade immer wieder neue Viren und
Würmer (buffer overflow).
Das tut mir leid für euch, ich habe für die Systeme, mit denen ich arbeite, noch keinen einzigen Wurm oder Virus gesehen…
Ein Grund warum der Stack executable ist beschert uns C++, da
es Klassen gibt in denen (intrinsic) Funktionen in der Klasse
selbst implementiert sind und daher dann der Code auf dem
Stack landet und dort ausgeführt wird.
Jaja, was so zwei kleine Plus ausmachen können
Es ist übrigens schön, wenn du einen Vortrag über die Schönheit und Unschönheit von statischer und dynamischer Allozierung hälst, leider war aber hier nicht danach gefragt. Es ist nämlich so, dass dieses Interface schon länger fest steht und somit die Variable nicht mehr in einen Zeiger geändert werden kann. Man kann nur noch Schaden begrenzen und dafür sorgen, dass die Leute keine Werte des Strukts selbst ändern, wenn sie nicht sollen. Da kann man noch so oft sagen, Zeiger wären besser, man darf es nicht mehr ändern.
So läuft es halt bei großer Softwareentwicklung…
Grüße
Ralph
P.S. Ich finde es schön, dass sich immer noch neue w-w-w-Rookies finden, noch viel Spaß im Forum und mögest du anderen Leuten mehr helfen als mir…