dettus
Bicycle User
herakles hatte in http://www.bsdforen.de/showthread.php?t=28112 den wunsch geaeussert einen neuen thread dazu aufzumachen. dort ist eine diskussion leicht off topic geworden.
ausgangspunkt war folgender code
dieser fuehrte zu compiler-problemen, richtig(er) waere hier folgendes gewesen:
bei der seitendiskussion ging es jetzt um die frage nach dem
was eine variable anlegt, diese aber nicht initalisiert. nun, wie schon im original erwaehnt, wird das ganze IMPLIZIT bei modernen compilern mit 0 inialisiert.
bei aeltern, und auch bei einigen selbstgestrickten im embedded bereich kann es allerdings vorkommen dass diese variable muell enthaelt.
wo kommt dieser muell her? antwort: vom stack. lokale variablen werden dort angelegt. nehmen wir mal an dass der stack im system bei 0x40001000 beginnt und in richtung kleiner werdende adresen waechst.
wie man leicht sieht(tm) teilen sich nun float x und int i die gleiche speicheradresse. damit kann es vorkommen dass das printf() etwas muell ausgibt.
ausgangspunkt war folgender code
Code:
int main(void){
int i;
++i %= 5;
return 0;
}
Code:
int main(void){
int i;
++i;
i %= 5;
return 0;
}
bei der seitendiskussion ging es jetzt um die frage nach dem
Code:
int i;
was eine variable anlegt, diese aber nicht initalisiert. nun, wie schon im original erwaehnt, wird das ganze IMPLIZIT bei modernen compilern mit 0 inialisiert.
bei aeltern, und auch bei einigen selbstgestrickten im embedded bereich kann es allerdings vorkommen dass diese variable muell enthaelt.
wo kommt dieser muell her? antwort: vom stack. lokale variablen werden dort angelegt. nehmen wir mal an dass der stack im system bei 0x40001000 beginnt und in richtung kleiner werdende adresen waechst.
Code:
void func1()
{
float x; // @0x40000FFC
int h; // @0x40000FF8
char y; // @0x40000FF7
short s; // @0x40000FF5
x=3.141519;
}
void func2()
{
int i; // @0x40000FFC
int j; // @0x40000FF8
printf("%i\n",i);
}
int main(void)
{
func1();
func2();
}
wie man leicht sieht(tm) teilen sich nun float x und int i die gleiche speicheradresse. damit kann es vorkommen dass das printf() etwas muell ausgibt.