Oppure

Loading
25/02/09 15:30
skip
salve
sto incominciando a studiare c++,
so che in c++ le variabili nello stack vengono immagazzinate in modo continuo

Ho creato un piccolo programmino per la verifica

perchè allora ho un buco di 4 bit tra F e E

ecco il codice

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{   int d;
int c;
int e;
double f;
int a;  
    
    cout<<&d<<" d"<<endl;
     cout<<&c<<" c"<<endl;
     cout<<&e<<" e"<<endl;
     cout<<&f<<" f"<<endl;
    cout<<&a<<" a"<<endl;
    cout<<sizeof(f);
    
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}



e questo è l'output

0x22ff74 d
0x22ff70 c
0x22ff6c e
0x22ff60 f
0x22ff5c a
8
Premere un tasto per continuare . . .
aaa
25/02/09 16:56
HeDo

Purtroppo non puoi prevedere un comportamento del genere, dipende da compilatore a compilatore.

Fare affidamento sull'ordine di allocazione delle variabili potrebbe portare a dei comportamenti imprevedibili del programma, quindi prendi per buona l'affermazione:

"di buona norma le variabili sono allocate in maniera continua e ordinata"

ma non basare nessun compito del tuo programma su questa affermazione, pena comportamenti imprevedibili
aaa
26/02/09 9:42
gigisoft
Postato originariamente da skip:

salve
sto incominciando a studiare c++,
so che in c++ le variabili nello stack vengono immagazzinate in modo continuo

Ho creato un piccolo programmino per la verifica

perchè allora ho un buco di 4 bit tra F e E

ecco il codice

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{   int d;
int c;
int e;
double f;
int a;  
    
    cout<<&d<<" d"<<endl;
     cout<<&c<<" c"<<endl;
     cout<<&e<<" e"<<endl;
     cout<<&f<<" f"<<endl;
    cout<<&a<<" a"<<endl;
    cout<<sizeof(f);
    
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}



e questo è l'output

0x22ff74 d
0x22ff70 c
0x22ff6c e
0x22ff60 f
0x22ff5c a
8
Premere un tasto per continuare . . .


Uhmmm... nel codice si fa visualizzare gli indirizzi in cui le variabili sono allocate, e in genere ad ogni locazione corrisponde un byte, per cui il "buco" tra F ed E non e' di 4 bit ma di 4 byte, e dipende dal fatto che F e' un double (non un int come le altre) che probabilmente viene rappresentato con 4 byte in piu' di un int.

Ciao
aaa