std::string nach char* konvertieren
-
Was hast du denn genau vor, sudo? Es gibt andere Möglichkeiten, an die Zeichen eines strings zu kommen.
-
Nunja - in den Zeiten, in denen die meisten Menschen mit Java-Anwendungen zufrieden sind und Maschinen auf dem Tisch stehen haben, die locker eine Marsmission koordinieren könnten, verliert dieser Ansatz aus den 70ern ein wenig an Brisanz.
Würde ich nicht sagen
Unterschätze mal die ganze Kopiererei und das allozieren von Heapspeicher nicht.Ich habe mir für ein Projekt ein Pendant zu std::string geschrieben, der allerdings statischen Speicher hat, nichts extra am Heap anlegt.
Ergebnis: Höherer Speicherverbrauchen, stark reduzierte CPU-Auslastung.
Und ganz ehrlich: 100MB mehr RAM verbrauch stören mich bei 8GB RAM deutlich weniger als die 20% mehr CPU-Auslastung, die das Nutzen von std::string gekostet hatNa gut, war auch eine Anwendung die sehr viele Stringoperationen durchgeführt hat...
-
Hi,
ich glaube trotzdem, dass in 90% der Fälle
- das Kopieren kein Problem ist oder
- man an anderen Stellen besser optimieren kann (Programmstruktur optimieren!) oder
- eine bessere std::string-Implementierung Abhilfe schafft.Und in 98% der Fälle schaffen häßliche const-casts bzw. eine sehr rigide "Bloß-nicht-Kopieren"-Strategie mehr Probleme als sie lösen.... (gerade über einen kompletten Lebenszyklus einer Anwendung betrachtet).
Gruß,
Simon2.
-
Icematix schrieb:
Na gut, war auch eine Anwendung die sehr viele Stringoperationen durchgeführt hat...
Dafür ist auch nicht std::string, sondern die Streamklassen vorgesehen.
-
Ein guter Compiler wird doch sowieso erkennen, ob was kopiert werden muß.
-
Alles kann der auch nicht wegoptimieren.
Er möchte einer Funktionen einen Zeiger auf eine nicht konstante Zeichenkette übergeben. Das geht mit der std::string Klasse nicht, daher muss er den Inhalt woanders hinkopieren. Oder er muss sich direkt gegen std::string entscheiden. Es könnte (?) evtl. eine STL Implementierung zulassen, den Inhalt von string per std::move in einen vector zu schieben. Glaub/weiß ich aber nicht.
Wurde doch auch schon alles gesagt, in den meisten Fällen wird man vom Kopieren überhaupt nichts bemerken, wenn doch, dann mach anders.