Arrays sind zu groß



  • Hallo,
    liebe C++-Gemeinde,
    ist mein erstes Thema hier!

    Vorweg ⚠ Einsteiger.
    Also bitte maximale Rücksicht 🕶!

    Ich hab folgendes Anliegen:
    Ich brauch für ein Programm Arrays von utopischer Größe zB. ...
    "
    int Array [1920][1080][960] [2] [2] [2] [2] [2] [2]
    //SIE SOLLTEN JEDERZEIT KONSTANT ABFRAGBAR BLEIBEN!!!
    //NICHT FRAGEN WOZU 😉

    "
    Nur bekomm' ich angezeigt, dass sie zu groß wären.
    Wie ist das zu verstehen.
    Hab schon viel im Internet nachgestöbert, doch konnte nur mir unverständliche Erklärungen finden(teilweise zu unsachlich, verwirrend u. variierend).

    Was ist also nun wirklich das Problem? Etwa meine persönliche RAM-Speichergröße
    oder doch nicht? 😕
    Gibt es vielleicht bessere Lösungsansätze 😕 oder Librarys die unermesslich große Arrays oder ähnliches ermöglichen?

    Freu mich auf eure Ideen u. Hilfestellungen! 😋
    LG



  • sC++k schrieb:

    int Array [1920][1080][960] [2] [2] [2] [2] [2] [2]
    LG

    Hi,
    du musst dich über Speicherbereiche informieren. Es gibt 3. Dein Array kommt auf den Stack, wobei dieser meist max. 1MB groß ist. Dein Array ist größer als 1MB. Die Lösung ist, Speicher vom Heap zu verwenden, d.h. du brauchst std::vector. Informier dich über std::vector. 😉



  • Kommt darauf an, hast du mehr als 118 GB RAM? So viel verbraucht das nämlich.

    Edit: Ja, * 4 latürnich. 😉



  • cooky451 schrieb:

    Kommt darauf an, hast du mehr als 118 GB RAM? So viel verbraucht das nämlich.

    *4 :p



  • Nimm dir eine 512 GB SSD Festplatte und nutze sie als langsame große RAM Erweiterung 😛



  • sC++k schrieb:

    Ich hab folgendes Anliegen:
    Ich brauch für ein Programm Arrays von utopischer Größe zB. ...
    "
    int Array [1920][1080][960] [2] [2] [2] [2] [2] [2]
    //SIE SOLLTEN JEDERZEIT KONSTANT ABFRAGBAR BLEIBEN!!!
    "

    Vermutlich ist das Array sehr dünn besetzt.

    Dann bau Dir einen Typ für den neundimensionalen Index und eine Hash-Funktion dafür und benutze eine Hashtable.



  • Erstmal danke für die schnellen Antworten. Gegenfrage wäre das Problem wirklich mit Vectoren zu lösen ohne größeren Speicheraufwand 😮 u. wenn dann in wiefern? 😕



  • sC++k schrieb:

    Erstmal danke für die schnellen Antworten. Gegenfrage wäre das Problem wirklich mit Vectoren zu lösen ohne größeren Speicheraufwand 😮 u. wenn dann in wiefern? 😕

    Nein, die 118G müßten verfügbar sein. Denke nicht, daß Du 118G RAM hast. Kann man bringen mit einer großen Auslagerungsdatei, warum nicht schnell eine 2Terabyte-Platte einbauen und die Auslagerungsdatei drauflegen? Wenn das Array entgegen meiner Annahme nicht dünn besetzt ist, ist das der einfachte Weg.

    Kannste machen. Hab ich auch schon gemacht. Eine SSD mit 120G als primäre Auslagerungsdatei und die Platte mit 2T als sekundäre (unter Linux kann man da Prioritäten festlegen). Muss aber sagen, als das Array so groß wurde, daß die SSD nicht mehr ausreichte, ist die Performance total in den Keller gegangen. So schrecklich lahm, daß ich mich genötigt fühle, umzuprogrammieren, bis die Daten in die SSD passten.

    Mit vector wäre das ja vector<vector<vector<...
    Mach einfach map<int,map<int,map<int,...
    NICHT konstante Zugriffszeit, aber trotzdem recht flott.

    unordered_map wäre noch stärker. auch verschachtelt wäre schon konstant. mein oben gennanter trick macht es halt noch schneller, noch weniger cache-misses.



  • An volkard:
    Hash?
    Warscheinlich bin doch noch zu sehr Einsteiger um eure Hilfestellungen auch zu verstehen! 😞

    Vielen Dank für den ausführlichen Tipp, aber leider kommt das mit der extra Festplatte nicht in Frage, da das Programm auch für andere benutzbar sein soll.

    An dieser Stelle muss ich wohl erwähnen dass es sich bei meinem Projekt um den Versuch Handelt eine Art "Unlimited Detail Point-cloud GAME ENGINE" zu programmieren.
    Und es kann sich ja nicht jeder so eine Festplatte dafür zulegen, nicht wahr?;)
    Also gibt es wirklich keine andere Möglichkeit? 😕



  • Und der nächste...
    Seit ein, zwei Wochen ist hier Trollparade.



  • sC++k schrieb:

    An volkard:
    Hash?
    Warscheinlich bin doch noch zu sehr Einsteiger um eure Hilfestellungen auch zu verstehen! 😞

    Jup. Musst wohl noch ein wenig lesen, um Dein Programmierproblem gut lösen zu können. Zu Hashtables erstmal:

    http://link.springer.com/chapter/10.1007/3-540-26895-2_14#page-1
    http://de.wikipedia.org/wiki/Hashtabelle
    http://de.wikipedia.org/wiki/Kuckucks-Hashing


Log in to reply