Vector clear potenzielle Verschwendung von Speicher ?!



  • Hallo Leute eine Frage zu folgenden Code

    int main() {
        std::vector<int> vec;
        for(int i = 0; i <100000000; i++){
            for(int j = 0; j < i+1;++j){
                vec.push_back(j);
            }
            vec.clear();
        }
    
        return 0;
    }
    

    Wenn dieser Code ausgeführt wird steigt mein Speicherverbrauch natürlich an.
    Für mich stellt sich die Frage wie folgt, wenn ich eine lange Zeit den vector größer werden lasse und irgendwann mal in meinem Code für längere Zeit nur wenige Elemente speichern muss, dann verschwende ich große Mengen an Speicher! Ist dies korrekt? Oder verstehe ich an der clear Methode etwas falsch

    Grüße



  • @c_new Ja, das ist so. Wenn du den Speicherverbrauch reduzieren willst, kannst du nach clear shrink_to_fit aufrufen. Ob dann auch wirklich Speicher freigegeben wird darf allerdings die Implementierung entscheiden.



  • Darum steht z.B. in clear auch die Alternative:

    vector<T>().swap(x);   // clear x reallocating 
    


  • Den Speicher freigegeben kriegst Du garantiert unter anderem mit:

    vector<int>().swap(vec);
    

    Edit:
    Okay, 5 Sekunden zu spät ...



  • ich danke für die Bestätigung! Wollte sichergehen, dass ich auf der suche in meinem Programm auf der richtigen Spur war!


Anmelden zum Antworten