Speicherverbrauch: Nested Struct oder interne Pointer?
-
volkard schrieb:
Dann raus aus der union. line auch, nehme ich an.
Gnargh, Denkfehler. Vielen Dank, jetzt läufts
-
Nirvash schrieb:
Gebunden bin ich nicht an C, jedoch reizt mich diese Sprache sehr.
Mich auch!!!
C++ ist wie C auf Extasy. Als Programmierer darf man offiziell sogar süchtigmachende Programmiersprachen konsumieren, ohne mit dem Gesetz in Konflikt zu geraten. Viele Programmierer erliegen der Droge und schnüffeln sich dermaßen viel davon rein, daß sie wie ein auf dem Buckel liegender Marienkäfer wild mit den Ärmchen wackeln, aber nichts mehr zustande bringen (Haha, Haskell!). Das ist mir vielleicht auch ein paar Jährchen passiert. Aber damals wußte noch keiner, wie gefährlich das ist. Die Schlimmen Sachen habe ich hinter mir und bin im Nachhinein wirklich sicher, daß ich davon soo viel gelernt habe, daß ich den Weg jedem empfehle. Naja, ich nahm, nur Lisp, Prolog, Basic, ASM, Pascal, C#, VB, Java, Forth und ein Dutzent andere weiche Drogen. (Ok, Forth und Lisp und C(==ASM-Makrocompiler) lassen einen niemals wieder ganz los, nimmermehr.)
Was kann schon schlimmstenfalls passieren? Eine C++-Tröte werden? Ok, bessere Einstellungschancen als jemand, der "nur" C kann.Optimal Du wirst nicht süchtig, dann biste auf beiden welten Überdurchschnittlich. C braucht mehr OO, C++ braucht mehr Bescheidenheit.
-
volkard schrieb:
Mich auch!!!
C++ ist wie C auf Extasy. Als Programmierer darf man offiziell sogar süchtigmachende Programmiersprachen konsumieren. Viele Programmierer erliegen der Droge und schnüffeln sich dermaßen viel davon rein, daß sie wie ein auf dem Buckel liegender Marienkäfer wild mit den ärmchen wackeln, aber nichts mehr zusatnde bringen. Ist mir vielleicht auch ein paar Jährchen passiert. Aber damals wußte noch keiner, wie gefährlich das ist. Die Schlimmen Sachen habe ich hinter mir und bin im Nachhinein wirklich sicher, daß ich davon soo viel gelernt habe, daß ich den Weg jedem empfehle.
Was kann schon schlimmstenfalls passieren? Eine C++-Tröte werden? Ok, bessere Einstellungschancen als jemand, der "nur" C kann.Optimal DU wirst nicht süchtig, dann biste auf beiden welten Überdurchschnittlich. C braucht mehr OO, C++ braucht mehr Bescheidenheit.
Ok, dem entnehme ich, dass ich meine C++ Kenntnisse aus der Berufsschule wieder auffrischen sollte
Sobald ich mit dem C Projekt fertig bin, werde ich mich dann mal ransetzen und es in C++ nachbauen, evnetuell kann ich danach ja dann das C Programm verbessern.
-
Genau.
Beispiel: http://www.c-plusplus.net/forum/314445
Nehme er doch einfach eine std::unordered_map und der Käse wäre gegessen.
Fertig. O(1) und offensichtlich asymptotisch optimal.
Ok, er hat kein C++. Dann baue er sowas ähnliches nach.
Sogar mit mehr Performance für seine Anwendung, weil die C++-Klassen so Allerweltsklassen sind, die irgendwie nie was halbes und nix Ganzes sind, sondern so allgemein für alle denkbaren Anwendungen ziemlich gut sind und für keine konkrete Anwendung optimal.
Als C++-Opfer wäre ihm die std::unordered_map ein geläufiger Begriff und er müßte nur noch rausgoogeln, wie das geht.
-
volkard schrieb:
Ok, er hat kein C++. Dann baue er sowas ähnliches nach.
Sogar mit mehr Performance für seine Anwendung, weil die C++-Klassen so Allerweltsklassen sind, die irgendwie nie was halbes und nix Ganzes sind, sondern so allgemein für alle denkbaren Anwendungen ziemlich gut sind und für keine konkrete Anwendung optimal.Genau aus dem Grund mag ich so sehr C. Ich muss zugeben, ich arbeite erst seid kurzem mit der Sprache und mein Code hat garantiert an vielen Stellen noch Optimierungsbedarf, da mir die Feinheiten der Sprache noch nicht so geläufig sind. Dennoch mag ich es sehr, mich um vieles selber kümmern zu müssen und nicht auf irgendwelche Funktionen oder Klassen zurückzugreifen, mit denen ich alles mögliche zwar machen kann, doch dafür dann die Laufzeit oder der Speicherverbrauch darunter leiden muss.
-
Die Laufzeit oder der Speicherverbrauch leidet darunter nicht!
Als Anfänger sind die C++ STL-Container wesentlich besser, als eigene, selbst zusammengebastelte Container (meistesn lineare Listen, obwohl andere Container u.U. besser sind).
Klar, wenn man C komplett beherrscht, kann es sein, dass eigene Container besser sind, weil die dann wirklich nur die Funktionalität bieten, die man wirklich braucht und nicht so überladen sind wie die STL-Container (wenn man die Größe nie abfragen will, muss man auch nicht dafür den Speicherplatz verschwenden sie zu speichern).
Dafür sind die STL-Container wesentlich generischer als C-Container. Dort nutzt man oft immer den gleichen Code.
Und ehe ich hier jetzt angeschnauzt werde: Auch ich habe zuerst C gelernt. Als ich dann zu C++ wechselte, kam ich mir vor, als hätte ich in meinem Lieblingsspiel gecheatet... Aber mit der Zeit lernt man so etwas zu schätzen.
-
volkard schrieb:
Ok, er hat kein C++. Dann baue er sowas ähnliches nach.
Sogar mit mehr Performance für seine Anwendung, weil die C++-Klassen so Allerweltsklassen sind, die irgendwie nie was halbes und nix Ganzes sind, sondern so allgemein für alle denkbaren Anwendungen ziemlich gut sind und für keine konkrete Anwendung optimal.Warum soll eine
unordered_map
denn nicht optimal sein?
-
TyRoXx schrieb:
volkard schrieb:
Ok, er hat kein C++. Dann baue er sowas ähnliches nach.
Sogar mit mehr Performance für seine Anwendung, weil die C++-Klassen so Allerweltsklassen sind, die irgendwie nie was halbes und nix Ganzes sind, sondern so allgemein für alle denkbaren Anwendungen ziemlich gut sind und für keine konkrete Anwendung optimal.Warum soll eine
unordered_map
denn nicht optimal sein?Weil sie üblicherweise eine Hashtable ist, die Ankerpunkte auf einfach verkettet Listen gibt. Also Verkettung in relativ teurem Überlaufbereich. Je nach dem kann es deutlich billiger sein, im Hauptbereich zu verketten, double hashing zu verwenden, eine cuchoo-hashtable, eine dynamische wachsende oder (gerade bei strings!) doch einen Baum.
-
volkard schrieb:
Sogar mit mehr Performance für seine Anwendung, weil die C++-Klassen so Allerweltsklassen sind, die irgendwie nie was halbes und nix Ganzes sind, sondern so allgemein für alle denkbaren Anwendungen ziemlich gut sind und für keine konkrete Anwendung optimal.
Wow! Volkard! Kannst du diese Aussage bitte in der C++-Sparte verbreiten.
Ich hab durchaus den Eindruck, dass dieses Wissen dort noch nicht komplett durch die "geheiligt seie dein Name, oh STL"-Mentalität durchgedrungen ist...
-
Nathan schrieb:
Dafür sind die STL-Container wesentlich generischer als C-Container. Dort nutzt man oft immer den gleichen Code.
Und ehe ich hier jetzt angeschnauzt werde: Auch ich habe zuerst C gelernt. Als ich dann zu C++ wechselte, kam ich mir vor, als hätte ich in meinem Lieblingsspiel gecheatet... Aber mit der Zeit lernt man so etwas zu schätzen.Wenn man aber um das letzte Prozentchen Performance kämpft, dann kann ein selbstgebauter Container, immer vorausgsetzt man weiß was man tut, durchaus helfen. Denn die STL ist eben, wie du schon sagst, für flexible möglichst breite Nutzung ausgelegt.
Das erinnert mich an den Thread zu STL-Strings, wo doch tatsächlich jemand überrascht war, dass die in der Verkettung spürbar langsamer sind als reine char*-Buffer.Erkenntnis: Selber denken lohnt sich manchmal