Tim wrote:
> Wieso spuckt der Compilieren keinen Fehler aus?
Weil ein Compiler nun mal kein Rundumsorglos Packet ist und es im
Allgemeinen ziemlich schwierig ist, den Speicherverbrauch eines
Programmes zur Laufzeit vorherzusagen. Was ist dir lieber: Wenn der
Compiler eine Zahl oder eine Warnung ausspuckt, auf die du dich nicht
verlassen kannst, oder wenn er dies nicht tut und dich daher zwingt
selbst zu überlegen was du tust.
Wie gross ist der Speicherverbrauch in folgendem Programm
1 | void foo()
|
2 | {
|
3 | char bar[5000];
|
4 | }
|
5 |
|
6 | int main()
|
7 | {
|
8 | }
|
die Allokierung in foo ist völlig irrelevant, da foo ja nie aufgerufen
wird.
was ist hier?
1 | void foo( int i )
|
2 | {
|
3 | char bar[100];
|
4 |
|
5 | if( i == 0 )
|
6 | return;
|
7 |
|
8 | foo( i - 1 );
|
9 | }
|
10 |
|
11 | int main()
|
12 | {
|
13 | foo( 5 );
|
14 | }
|
wie gross ist jetzt der Speicherverbrauch zur Laufzeit für lokale
Variablen?
(Es werden so um die 550 Bytes sein, Stackverbrauch für Returnadressen
nicht mitgerechnet)
Änderst du den Aufruf in main auf foo( 100 ), dann wird auch das deinen
Mega32 sprengen.