[Strings] Welche benutzt ihr?



  • @Optimizer
    warum der geläufigste Standard?

    Ok, war vielleicht vorschnell geurteilt. 🙂
    Auf jeden Fall implementieren alle mir bekannten C++ Implementierungen (ok, sind nicht so viele 🙄 ), Java und C# diesen Standard. Deshalb bin ich jetzt einfach mal davon ausgegangen. Wir reden ja auch nur über Programmiersprachen, oder?



  • kingruedi schrieb:

    otze schrieb:

    string benutzt new, das nur mal so am rande erwähnt

    nö, string nutzt einen Allocator, der muss nicht new verwenden oder gar den Heap

    hab mich ma fix schlau gemacht:
    The Standard C++ Library provides a default allocator class, allocator, that implements this interface using the standard new and delete operators for all storage management.

    damit is klar, dass der heap benutzt wird,da new aufm heap speicher reserviert
    -.-



  • otze schrieb:

    char* text=new char[6];
    *text="Hallo";

    Das hier soll langsamer sein?
    Das kompiliert nicht einmal.

    MfG Eisflamme



  • @otze
    aber du kannst den allocator beliebig ändern und anpassen. Deswegen ist eine generelle Aussage, dass string mit new arbeitet falsch.

    (btw. new allokiert auf dem FreeStore nicht auf dem Heap 🙄)

    @Optimizer
    also der GCC nutzt UCS-4 soweit ich weiss



  • dann erklär mir mal den Unterschied zwischen FreeStore und heap. Ich hab in der bcb hilfe nach mehreren minuten suche(FreeStore kennt der nicht, ka wieso^^) unter heap nämlich "free storage(heap)" gefunden,so wies aussieht scheints ein und dasselbe zu sein.

    und zum thema string: string benutzt den standard allocator,was man an folgenden code zeilen sehen kann:
    [cpp]
    template <class charT,class traits = char_traits<charT>,class Allocator = allocator<charT> >
    class basic_string;
    [/cpp]
    man könnte ja jetzt denken, dass in string ein anderer allocator benutzt werden könnte, aber:

    typedef basic_string <char> string;
    

    demnach benutzt string new, und für den Fall,dass FreeStore und heap ein und dasselbe sind,benutzt es auch den heap.



  • Hallo,

    free store ist für new und delete, der heap für malloc und free.



  • ihr vergesst die short-string-optimization...

    std::string ist bzw. kann mehr sein als ein simples char-array. Leider ist dies nur selten der Fall. Aber STLPort hat zB eine _sehr_ schnelle string Klasse, während der VC++6 eine _sehr_ langsame (wegen COW) hat.



  • Hi,

    jetzt hab ich da doch mal ein paar Fragen was ist der Unterschied zwischen der STL und STLPort?

    Welche Compiler benuzen was? ( MinGW/GCC, VC, BCC)?

    Welche Variante ist hat die schnellste Implementation?

    Ich dachte immer STL == STLPort aber da hab ich mich wohl getäuscht.

    MfG



  • eViLiSSiMo schrieb:

    jetzt hab ich da doch mal ein paar Fragen was ist der Unterschied zwischen der STL und STLPort?

    STLPort ist eine STL Implementierung (www.stlport.org)

    Wobei STL eigentlich nicht der richtige Name ist - denn in wirklichkeit heisst es ja "C++ Standard Library", aber STL hat sich eingebürgert.

    Welche Compiler benuzen was? ( MinGW/GCC, VC, BCC)?

    gcc verwendet die libstdc++, eine freie STL implementierung
    vc++ verwendet die dinkumware STL (eine kommerzielle Implementierung), VC++6 verwendet eine sehr alte Version, da ist diese Library recht mies. Neuere Versionen sind da wesentlich besser.
    bcb verwendet seit version 6 STLPort, dafür RogueWave (eine komererzielle Implementierung). mit dem freien bcc habe ich damit eigentlich nur probleme gehabt.

    Welche Variante ist hat die schnellste Implementation?

    STLPort ist _sehr_ gut, aber angeblich sollen die neuen Dinkumware Libraries auch gut sein. RoqueWave ist eigentlich mist (kenne aber keine neue Version davon).



  • CarstenJ schrieb:

    Hallo,

    free store ist für new und delete, der heap für malloc und free.

    und wo ist der unterschied?
    ich hab weder in der bcb hilfe, noch in meinen Lektüren, noch in der msdn nützliche einträge dazu gefunden,und bei google hab ich dazu auch keine erklärung erhalten können.



  • Hallo,

    sieh mal hier nach:
    http://www.gotw.ca/gotw/009.htm

    Allerdings hast du im Grunde recht, denn einen richtigen Unterschied kann ich daraus auch nicht erkennen. Zumindest wird nicht erklärt, inwiefern sich diese Bereiche unterschiedlich verhalten.

    Wenn es doch einen erheblichen Unterschied gibt, würd ich den auch gerne wissen.



  • Ich benutze fast alles was mir die Sprache bietet .....

    Wenn ich kann nutz ich CString oder das ATL Pendant.
    Sobald ich irgendwie serialisieren will, oder verwalten muss, nehm ich auch std::basic_string<TCHAR> .... besonders wenns Module werden die nicht MFC oder ATL vorraussetzen sollen. Wenn ich mal was unter Unix/Linux mache, soweiso ...

    die STL strings nehm ich ned ... wenn ich strings in maps / sets tun muss (performance, da eignen sich pointer oder referenzgezaehlte strings besser) oder wenn ich API (also reine C Funktionen) mit strings befuellen muss, besonders wenn die als buffer verwendet werden. Da nehm ich char-arrays natuerlich ....

    Ciao ...


Anmelden zum Antworten