Was passiert, wenn das deklarierte array zu groß ist?



  • Hi,

    arrays auf dem Stack deklariert man ja so:

    int feld[NEGROSSEZAHL];
    

    Was ist nun, wenn der soviel Speicher gar nicht verfügbar ist?
    Der Compiler kanns ja schlecht wissen.

    Überprüft das die Runtime-Library beim starten des Programms?
    Ich habe darüber weder im ANSI Standard noch in der MSDN was gefunden...

    thx



  • Der Compiler kanns schon wissen. In VC++ ist der Stack imho per default auf 1 MB gesetzt, kann aber geändert werden. Muss aber nicht unbedingt immer so sein. Linux/gcc machen das iirc anders (Stack kann mit ulimit gesetzt werden).



  • Hmm,

    also mein Visual-C erlaubt ein
    Array von >~500MB
    ohne, dass ich was ändern müsste.

    Sagt denn der Standard gar nichts dazu?

    Halt, das ist ja int, also sogar 4x soviel.
    2GB sind ja AFAIK auch die Grenze für App-Memory unter Windows...



  • SeppSchrot schrieb:

    Sagt denn der Standard gar nichts dazu?

    Lustig, das Wort "Stack" wird im Standard (C99) kein einziges mal erwähnt. "Heap" ebenso...

    Aber dass dein VC da nicht meckert finde ich strange...



  • SeppSchrot schrieb:

    arrays auf dem Stack deklariert man ja so:

    int feld[NEGROSSEZAHL];
    

    Was ist nun, wenn der soviel Speicher gar nicht verfügbar ist?

    Für solche Sachen ist der Stack auch nicht da.

    Arrays dynamisch anzulegen, solltest du in folgenden Situationen machen:
    1. die Array Grösse ist zur Compilezeit unbekannt
    2. du benötigst grosse Mengen an Daten

    Und da 2. auf dein Beispiel zutrifft, solltest du dir keine Gedanken über Stackgrösse machen, sondern dynamisch reservieren.



  • Das ist natürlich klar, groovemaster.
    Ich würde es trozdem gerne mal wissen.

    Irgendwie muss es doch dafür eine konkrete Regelung geben.
    Wo beginnt denn genau die "große" Menge an Daten?



  • SeppSchrot schrieb:

    Irgendwie muss es doch dafür eine konkrete Regelung geben.

    Die gibt es nicht. Das ist von Platform zu Platform und selbst von Compiler zu Compiler unterschiedlich.

    SeppSchrot schrieb:

    Wo beginnt denn genau die "große" Menge an Daten?

    Solche Sachen richtig einzuschätzen, machen imo gute und weniger gute Programmierer aus.


Anmelden zum Antworten