Arbeiten mit grosser Anzahl von Daten



  • Hallo,

    in einem Programm will ich mit sehr großen Datenmengen arbeiten z.B brauche ich ein Array mit ca. 100 mio, Elementen aber das macht der Computer natuerlich nicht mit. Wie kann ich trotzdem mit den Daten arbeiten. Die ganzen Daten stehen in einer Datei die ungefähr 100 MB groß ist. Ich muss die Daten miteinander vergleichen etc. Wie kann man das machen ?

    mfg



  • Also davon abgesehen dass man 100 MB wohl noch in den Speicher bekommen sollte (am Stück), gibt es da einige Möglichkeiten, z.B. die Datensätze nacheinander zu lesen, und jeweils nur einen oder wenige gleichzeitig verarbeiten, oder blockweise (je 1000 Sätze pro Schritt z.B.)... Wenn die Elemente konstant groß sind kann man auch jeweils die Position in der Datei direkt anspringen, also gewissermaßen die Datei als "Array" missbrauchen.

    Kommt natürlich insgesamt stark auf die Art der Daten an und was damit gemacht wird (zuerst solltest Du Dir die Frage stellen, muss ich immer alle Elemente direkt zugreifbar haben, oder kann ich auch nachlesen)



  • Wie hast du denn das Array instanziert? So etwas:

    int a[1000000];
    

    Das geht natürlich nicht, weil das auf dem beschränkten Stack angelegt wird. Du müsstest es dynamisch auf dem Heap mit new instanzieren: Oder nimm am besten einen std::vector, der ist eher für sowas gedacht. vector wird hier wöchentlich nachgefragt, such mal in alten Threads.



  • Ich nehme auch schon einen vector und wenn ich schon am Anfang festlege das ich 64^4 int werte brauche bricht er trotzdem zusammen. Vielleicht habe ich in meinem ersten Post etwas sehr unglücklich ausgedrückt die Datei sieht etwas so aus:

    165161
    165541
    165122

    Und die ganze Datei ist etwas 100 MB groß und es stehen ca. 64^4 Werte drin wenn ich jetzt fuer jeden int wert in der Datei einen int wert im Heap freimache bringt das mein Programm zum absturz.



  • der fehler wird irgendwo anders liegen.

    vector<int> bigvec(16777216); // 64^4
    

    sowas sollte absolut problemlos sein.


Log in to reply