Speicherlimit eines Programms

OP #5982090
Ich portiere gerade ein Programm von C zu C++ und entdecke ein seltsames 
verhalten.
1
class wave{
2
  public:
3
    wave(){
4
    }
5
        int datin[500000];  //Funktioniert
6
        // int datin[600000];  //Läuft nicht mal an.
7

8
};

Dabei gibt es beim Kompilieren gar keine Fehler oder Warnungen.

Hat jemand eine Idee, woran es liegen könnte? Gibt in Eclipse irgendwo 
einen Speicherlimit oder ähnliches?
Wie viele immer wieder schreiben: den entscheidenden Teil deines 
Programms hast du weggelassen. Daher muss ich viel Hellsehen und liege 
ggf. falsch.

Falls du z.B. in der main() Funktion so eine Instanz erzeugst:
1
int main() {
2
  wave myWave;
3
}

dann produzierst du wahrscheinlich einen Stack overflow, falls die 
Stack-size nur 512 kB ist.

Wenn du den Speicher mit 'new' auf dem Heap allokierst, dann vermeidest 
du den Stack overflow:
1
int main() {
2
  wave* pMyWave = new wave();
3
  [...]
4
  delete pMyWave;
5
}

Solch große Datenblöcke sollte man nicht auf den Stack legen.
Solocan Z. schrieb:
> Ich portiere gerade ein Programm von C zu C++ und entdecke ein seltsames
> verhalten.
>
>
1
> class wave{
2
>   public:
3
>     wave(){
4
>     }
5
>         int datin[500000];  //Funktioniert
6
>         // int datin[600000];  //Läuft nicht mal an.
7
> 
8
> };
9
>
>
> Dabei gibt es beim Kompilieren gar keine Fehler oder Warnungen.
>
> Hat jemand eine Idee, woran es liegen könnte? Gibt in Eclipse irgendwo
> einen Speicherlimit oder ähnliches?

Vielleicht // bei
// int datin[600000];
entfernen, dann läuft es.
Gast
Solocan Z. schrieb:
> Dabei gibt es beim Kompilieren gar keine Fehler oder Warnungen.

Du legst ja auch nie eine Instanz von "wave" an. Du kannst beliebig 
viele beliebig große Klassen definieren, ohne dass was passiert. Erst 
wenn du davon Instanzen anlegen möchtest, gibt es Probleme. Ganz genau 
wie bei "struct" in C.

Ein struct oder eine Klasse ist wie ein Bauplan. Du kannst auch einen 
Bauplan von einem Flughafen aufmalen ohne dass es Probleme gibt. Erst 
wenn man ihn bauen will fällt auf dass es auf der Welt nicht genug Kabel 
gibt, oder was auch immer das Problem ist...
Michael D. schrieb:
> Wie viele immer wieder schreiben: den entscheidenden Teil deines
> Programms hast du weggelassen.

Überhaupt fehlt erstmal das Wichtigste, welches Target, welcher 
Compiler, welches OS usw.?
Da Du ja nicht unter PC-Programmierung postest, kann es alles mögliche 
sein, außer ein W10- oder Linux-PC.


Solocan Z. schrieb:
> Gibt in Eclipse irgendwo
> einen Speicherlimit oder ähnliches?

Nö, eine IDE kennt keine Limits. Die kennt erst das Linker-Script für 
Dein unbekanntes Target.
Z.B. auf einem ARM Cortex bräuchtest Du dafür schonmal 2,4MB RAM je 
Instanz.
OP
Danke für sehr hilfreiche Antworten.

Ja, es lag daran, dass das Array durchs Instanzieren in den 
Programmspeicher gelegt wurde und dieser nicht ausreichte. Dynamisches 
Allokieren hat das Problem beseitigt.

Ich werde mir jetzt in Ruhe mal das Speicherkonzept und Anwendung von 
C++ angucken.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.