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 hat 😉

    Na 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.


Anmelden zum Antworten