std::string::reserve()



  • Hallo,

    ich habe hier eine ganz gute Referenz für u.a. auch die Klasse std::string.
    Nun möchte ich zu Optimierungszwecken die Funktion reserve() verwenden - dazu heißt es in genannter Referenz:

    If necessary, expands the string's internal storage so that it can hold at least size characters. This optimizes subsequent append() and operator+=() calls. The string can grow, through appending, up to a total length of size before reallocating storage. Calling other functions to manipulate the string, or assigning this string to another string, disables the reserve effect.

    Nun meine Frage: Welche Funktionen sind in dem hervorgehobenen Satz gemeint? Vernichtet schon ein simples assign (bzw. operator= ) den Effekt? Oder ist das gar nicht im Standard vorgeschrieben und ich muß auf eine gescheite Implementation meiner Entwicklungsumgebung hoffen?

    Danke im Voraus.



  • hi

    Cocaine schrieb:

    Hallo,

    ich habe hier eine ganz gute Referenz für u.a. auch die Klasse std::string.
    Nun möchte ich zu Optimierungszwecken die Funktion reserve() verwenden - dazu heißt es in genannter Referenz:

    If necessary, expands the string's internal storage so that it can hold at least size characters. This optimizes subsequent append() and operator+=() calls. The string can grow, through appending, up to a total length of size before reallocating storage. Calling other functions to manipulate the string, or assigning this string to another string, disables the reserve effect.

    Nun meine Frage: Welche Funktionen sind in dem hervorgehobenen Satz gemeint? Vernichtet schon ein simples assign (bzw. operator= ) den Effekt? Oder ist das gar nicht im Standard vorgeschrieben und ich muß auf eine gescheite Implementation meiner Entwicklungsumgebung hoffen?

    Danke im Voraus.

    ich glaube du hast das was falsch verstanden. Es geht nur um das vorreservieren von Speicherplatz.

    Beispiel: Du schreibst in die string Klasse den Text "Hallo" ein. Um den string zu speichern müsste man platz für 6 Zeichen reservieren. (Hallo + Endekennung) Da aber das neu anfordern von Speicherplatz ziemlich lange dauert reserviert man statt 6 Zeichen zum Beispiel 60 Zeichen. Dadurch hat man einen größeren speicherplatz verbrauch aber das langsame speicherplatz reservieren entfällt dadurch bis man zu den 60s Zeichen gekommen ist.

    Die Klasse string reserviert intern mehr speicherplatz damit das hinzufügen von neuen Zeichen ( mit append() bzw. operator+=() ) schneller abläuft.

    Gruß
    de_Bert



  • Nein, genau so hab ich das auch verstanden. Mich irritiert nur der fett hervorgehobene Satz, daß gewisse Manipulationsroutinen den durch reserve() erzielten Effekt verhindern. Da steht ja nicht, WELCHE Routinen das sind, allerdings wäre es schon unlogisch, wenn der Zuweisungsoperator dazugehörte... 😉



  • hi

    Würde mal sagen das es alle Funktionen sind, die zur Manipulation des Strings vorhanden sind.

    Nö wieso ist das schwachsinnig. Der Zuweisungsoperator (=) wird ja oft( von mir z.B ) nur dazu verwendet um den string als temponäre speicherung für z.B. die Textausgabe zu benutzt oder um ihn zu initalisieren.

    Wobei wenn ich mir den Text nochmal durch lese dann steht da ja, das er Effekt kurzfristig abgeschaltet wird. Dann würde es ja Sinn machen. Weil er nur den String übergibt der ja tatsächlich vorhanden ist. (Währe ja schwachsinnig auch die zusätzlichen reservierten auch noch zuzuweisen. Währe ja fast doppel gemoppelt.)


Log in to reply