wie groß können die container aus der STL werden?



  • hallo, ich hab mal ne ganz einfache Frage: Wie groß können die Container aus der STL maximal werden? Gibt es da Obergrenzen oder wird das rein durch meinen Arbeitsspeicher/Pc bestimmt? Und wann werden die Datenstrukturen wieder aufgelöst? Zum Ende einer Funktion in der sie deklariert und verwendet wurden oder am am Programmende? Ich frage deswegen, weil ich größere Mengen an Meßwerten einlesen will, und nicht nach zig stunden arbeit feststellen will, dass ich mit der STL nich weiterkomme..



  • 1. Begrenzung durch den Datentyp size_t. Meistens auf 32 bit Systemen somit über 4 Milliarden Elemente, die in einen Container verwaltet werden können. Auf einem 64 bit System entsprechend 18446744073709551616 Elemente. 😉
    2. Durch den Hauptspeicher begrenzt, wenn size_t nicht ausgeschöpft werden kann (was meistens der Fall ist).

    das man mit der C++ Standard Lib nicht weiter kommen kann, ist eher unwahrscheinlich. Du wirst es selber nicht besser hinbekommen. Warum denken manchen Programmierer, sie könnten bessere Container spezifizieren oder implementieren, als es die alten Gurus von HP, SGI usw. tun? (die Standardlib ist keine Hobby-Library!)

    Die Elemente im Container werden dann zerstört, wenn der Container zerstrört wird (dafür ist der Destruktor im Container zuständig). Wenn Du aber Pointer im Container ablegst, mußt du selber die Elemente auf die die Pointer zeigen, löschen.

    Schreib dir einfach eine Testklasse, in der du das Verhalten beobachten kannst:

    class Dummy
    {
        public:
            ~Dummy()
            {
                cout << "Dummy wird zerstoert" << endl;
            }
    };
    
    void foo1()
    {
         cout << "Objekte: " << endl;
         vector<Dummy> dummies;
          /// hier Vector mit ein paar Dummy-Objekte füllen
    }
    
    void foo2()
    {
         cout << "Pointer: " << endl;
         vector<Dummy*> dummies;
          /// hier Vector mit ein paar Dummy-Objekte füllen
    }
    
    int main()
    {
         foo1();
         foo2();
    }
    

    Und dann die Konsolen-Ausgabe beobachten.



  • d.h. bei 4GB ram arbeitspeicher könnten man 4,3 Mrd. Objekte mit der größe eines Bytes speicher.. wobei man noch den overhead einberechnen müsste


Anmelden zum Antworten