Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Buco di  bit
Forum - C/C++ - Buco di bit

Avatar
skip (Normal User)
Newbie


Messaggi: 16
Iscritto: 25/02/2009

Segnala al moderatore
Postato alle 16:30
Mercoledì, 25/02/2009
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

Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {   int d;
  8. int c;
  9. int e;
  10. double f;
  11. int a;  
  12.    
  13.     cout<<&d<<" d"<<endl;
  14.      cout<<&c<<" c"<<endl;
  15.      cout<<&e<<" e"<<endl;
  16.      cout<<&f<<" f"<<endl;
  17.     cout<<&a<<" a"<<endl;
  18.     cout<<sizeof(f);
  19.    
  20.    
  21.    
  22.     system("PAUSE");
  23.     return EXIT_SUCCESS;
  24. }



e questo è l'output

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

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 17:56
Mercoledì, 25/02/2009

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

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:42
Giovedì, 26/02/2009
Testo quotato

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

Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {   int d;
  8. int c;
  9. int e;
  10. double f;
  11. int a;  
  12.    
  13.     cout<<&d<<" d"<<endl;
  14.      cout<<&c<<" c"<<endl;
  15.      cout<<&e<<" e"<<endl;
  16.      cout<<&f<<" f"<<endl;
  17.     cout<<&a<<" a"<<endl;
  18.     cout<<sizeof(f);
  19.    
  20.    
  21.    
  22.     system("PAUSE");
  23.     return EXIT_SUCCESS;
  24. }



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

PM Quote