Riesen Array anlegen



  • Hallo,
    weiß jemand wie ich unter ubuntu in ein c++ prog ein
    array erstelle mit 1mrd. int werten?
    bei

    int *array;
    
    array = (int*)malloc(1000000000 * sizeof(int));
    ...
    

    bekomme ich beim ausführen ein Segmentation fault,
    mache ich die sache kleiner gehts.
    wie kann ich ein so großes array in den heap bekommen?

    gruß



  • was du da machst ist alles aber kein C++, sondern C

    in der c++ abteilung macht man das mit vector

    #include <vector>
    /*
      code
      ...
    */
    
    vector<int> arr(1000000000);
    // rest des codes
    


  • der vorteil hierbei ist auch, dass man eine bad_alloc-exception erhält, wenn der nicht genügend Speicher zur Verfügung steht.



  • ok ich muß es aber in c haben. weiß jemand wie das geht?



  • anonym schrieb:

    ok ich muß es aber in c haben. weiß jemand wie das geht?

    hast du denn ~4GB Arbeitsspeicher zur Verfügung? Denn unter der Annahme, dass bei dir ein Integer 4 Byte neötigt, bist du bei 1E9*4/1024/1024/1024 = 3.8GB 😃



  • hab zugang zu noch besser ausgestatteten maschinen.
    ihr meint also wenn der rechner einfach mehr ram hat läuft der heap nicht voll
    dann probier ichd as gleich ma



  • desweiteren glaube ich nicht das ram der beschränkende faktor ist da es wenn es zu groß für den ram ist eigentlcih rausgepaged werden müßte.
    leider kann ichs nicht auf der uni maschine testen da dort kein openmp installiert ist.



  • anonym schrieb:

    ... da es wenn es zu groß für den ram ist eigentlcih rausgepaged werden müßte.

    so die theorie, aber bei einem array, dass sich per definition zusammenhängend im speicher sein muss, habe ich auf bei "riesen"-arrays meinem PC mit 8GB ebenfalls probleme...


  • Mod

    Was hast du denn vor mit einer Milliarde Integer gleichzeitig im Speicher? Vielleicht gibt's ja eine bessere Lösung.



  • SeppJ schrieb:

    Vielleicht gibt's ja eine bessere Lösung.

    Aber nur vielleicht. 😃



  • Wenn du solch große Mengen an Heapspeicher brauchst, dann musst du dich mehr mit der Hardware und dem Betriebssystem auseinandersetzen, auf dem du programmierst.

    Desweiteren solltest du dir Gedanken über dein Design machen. Es gibt ja viele Anwendungsbereiche (z.B. Harddiskrecording), wo schnell große Datenmengen zusammenkommen können. Natürlich kann man diese Daten nicht komplett im Arbeitsspeicher vorhalten sondern schreibt sie blockweise auf die Festplatte, wo Datenmengen dieser Größenordnung hingehören.



  • anonym schrieb:

    weiß jemand wie ich unter ubuntu in ein c++ prog ein
    array erstelle mit 1mrd. int werten?

    anonym schrieb:

    ok ich muß es aber in c haben.

    wenn du schon nicht weißt in welcher sprache du es haben willst, bist du dir sicher, dass es wirklich 1000000000 werte sein müssen? nicht vielleicht doch bloß 1.000? 😃



  • brau dir halt ne liste



  • PRIEST schrieb:

    brau dir halt ne liste

    naja, also wenn das array schon knapp 4GB braucht, dann VIEL spass mit einer liste. ich denke er sollte erst darüber nachdenken, ob er die anzahl an ints benötigt, oder ob er sie evtl in kleinere arrays aufteilen kann... evtl reichen ja auch shorts 😃


Log in to reply