Speicherreservierung für Arrays und sehr große Variable



  • HI
    ich habe gleich zwei Anliegen:

    1. Wie kann ich Speicher für ein sehr großes Array reservieren?
    Ich will ein Array mit mehr als 2 Mio. Elementen anlegen. Dass dazu der Stack nicht ausreicht hab ich mittlerweile herausgefunden. Wie ich aber mehr Speicher reservieren lasse hab ich nicht so ganz kapiert. Wäre nett, wenn mir das jemand erklären könnte.

    2. Gibt es einen wirklich großen Variablentyp?
    Der größte mir bekannte ist unsigned long long int (ich benötige ihn unsigned und nur ganzzahlig). Weiß jemand eine längere Variable? Oder kann man das irgendwie selbst festlegen, wie viel byte sie hat?

    Danke im Voraus für die Antworten

    ach ja, ich programmiere noch nicht so lang, also komplizierte Erklärungen versteh ich vielleicht nicht so ganz 😃



  • BigJ schrieb:

    HI
    ich habe gleich zwei Anliegen:

    1. Wie kann ich Speicher für ein sehr großes Array reservieren?
    Ich will ein Array mit mehr als 2 Mio. Elementen anlegen. Dass dazu der Stack nicht ausreicht hab ich mittlerweile herausgefunden. Wie ich aber mehr Speicher reservieren lasse hab ich nicht so ganz kapiert. Wäre nett, wenn mir das jemand erklären könnte.

    Du mußt dein Array auf dem Heap anlegen:

    char *pHeap = new char[500];
    

    oder welchen Typ du auch immer hast...
    Aber wenn du C++ proggen willst, würde ich std::vector bevorzugen...

    Google mal nach dem Unterschied zwischen Heap und Stack.
    Ist nen relativ komplexes Thema, was dir hier wohl keiner komplett vorkauen wird.

    http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Speicherverwaltung
    Ansonsten wirst du hier mit so einem Link rechnen können:
    http://www.lmgtfy.com/?q=Speichermanagement+Stack+Heap

    BigJ schrieb:

    2. Gibt es einen wirklich großen Variablentyp?
    Der größte mir bekannte ist unsigned long long int (ich benötige ihn unsigned und nur ganzzahlig). Weiß jemand eine längere Variable? Oder kann man das irgendwie selbst festlegen, wie viel byte sie hat?

    Da können wir mal kucken, wenn du dir nen zusätzlichen RAM-Riegel besorgt hast 😉

    EDIT: Ups... Ich dachte es war auf das array bezogen ^^



  • BigJ schrieb:

    1. Wie kann ich Speicher für ein sehr großes Array reservieren?

    Nimm std::vector . Wenn kein genügend grosser Block frei ist ( std::bad_alloc ), nimm std::deque .

    BigJ schrieb:

    2. Gibt es einen wirklich großen Variablentyp?

    Nicht in Standard-C++, aber du kannst eine Bibliothek (BigInteger oder so) verwenden.



  • Danke für die Antwort
    Das mit dem Heap hab ich gecheckt (also zumindest wie ich es anwenden muss)

    Bei der Variable nicht:
    So viel Speicher braucht ne Variable doch nicht, auch keine long long, dass dafür mein Arbeitsspeicher die Begrenzung wäre (Korrigiert mich wenn ich da falsch liege). So groß, dass das der Fall wäre muss sie auch wieder nicht sein 🙂

    Also weiß da jemand ne Möglichkeit?



  • Nexus hat bereits eine genannt. Eine BitInteger Klasse, wie du sie z.b hier findest:
    http://www.gmplib.org/



  • Schau dir meinen Post an... Und verwende kein new , wenn nicht absolut nötig. Für dynamische Arrays ist es alles andere als nötig, dazu habe ich bereits bessere Alternativen genannt.



  • Wie hab ich std::vector bzw. std::deque anzuwenden?



  • Hi BigJ,

    wollte dich nicht verwirren...

    Wie mein Edit 5 Sekunden vor deinem Post zeigt, hatte ich es fehl interpretiert.
    Ich dachte du wolltest eine größere Variable um mit dem Wert ein großes array anzulegen.

    Gruß,
    CSpille



  • Ach ja, ich brauche kein dynamisches Feld. Es soll lediglich sehr viele Elemente, deren Anzahl aber von Anfang an feststeht, besitzen können.



  • Achso... nein, die beiden Fragen sind eigentlich unabhängig voneinander, ich dachte nur ich mach beides in einen Post.



  • BigJ schrieb:

    Wie hab ich std::vector bzw. std::deque anzuwenden?

    http://www.lmgtfy.com/?q=std%3A%3Avector+example

    Erster Treffer:
    http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027/



  • Siehe vielleicht auch den Artikel
    Aufbau der STL – Teil 1: Container


Anmelden zum Antworten