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++ - indirizzi di memoria in c++
Forum - C/C++ - indirizzi di memoria in c++

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 9:09
Sabato, 01/08/2009
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(){
  6.  
  7.   double f=0.0;
  8.   int k=0;
  9.    cout<<&k<<endl<<&f;
  10.    system("pause");
  11.  
  12. }



questo è un semplicissimo programma in c++ che visualizza gli indirizzi di memoria delle variabili, ho notato che ogni volta che rilancio il programma sotto linux gli indirizzi cambiano, (il chè mi sempra normalissimo), mentre sotto windows rimangono sempre gli stessi;:noway: come mai?
uso Dev-c++

Ultima modifica effettuata da puffin il 01/08/2009 alle 9:12
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 9:31
Sabato, 01/08/2009
Il fatto che siano sempre gli stessi non mi pare strano, anzi, mi pare strano il contrario.

Sono comunque indirizzi virtuali non fisici di memoria.

PM Quote
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 9:42
Sabato, 01/08/2009
?????????????????????
memoria virtuale?????
ma tutto il discorso re-indirizzamentro tramite la MMU non è del tutto trasparente al programmatore?
voglio dire facendo &(nomevar) non ottengo l'indirizzo in memoria principale?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 9:47
Sabato, 01/08/2009
No ... assolutamente.

Ottieni l'indirizzo virtuale tra quelli assegnati al processo dal sistema.

La parte "trasparente" e' l'individuazione della cella di memoria fisica a partire dall'indirizzo virtuale. Quella non interessa chi programma ma e' il sistema a gestirla.

Ultima modifica effettuata da theprogrammer il 01/08/2009 alle 9:48
PM Quote
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 9:50
Sabato, 01/08/2009
ma allora il comportamento sotto linux ( per la precisione ubuntu ) da cosa dipende?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 9:54
Sabato, 01/08/2009
Mah ... attualmente non ho modo di provarlo sotto Linux, ma quelle variabili sono allocate nello "stack" del processo in quanto sono interne alla funzione main.

Quindi e' possibile che, da esecuzione in esecuzione, l'indirizzo virtuale dello stack sia diverso (per vari motivi) ma ripeto, mi sembra un po' strano e approfondiro' la questione ...

PM Quote
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 10:02
Sabato, 01/08/2009
grazie come sempre del tuo tempo

Ultima modifica effettuata da puffin il 01/08/2009 alle 10:18
PM Quote
Avatar
puffin (Normal User)
Rookie


Messaggi: 30
Iscritto: 18/07/2009

Segnala al moderatore
Postato alle 16:02
Domenica, 02/08/2009
oggi fatto un esperimento.
ho disabilitato la memoria virtuale impostandola a 0 MB, come mai gli indirizzi rimangono ancora gli stessi sotto windows, possibile che veda ancora indirizzi virtuali?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 16:06
Domenica, 02/08/2009
Sono due concetti diversi, anche se espressi con medesimi termini.

Gli "indirizzi virtuali" di cui abbiamo parlato rappresentano lo "spazio di indirizzamento" del processo. Questi indirizzi sono convertiti in indirizzi fisici se corrispondono a dati/codice caricato in memoria in un determinato momento. Altrimenti il sistema carica da disco le porzioni di dati/codice necessari che prima sono stati swappati dalla memoria.

Con l'impostazione a 0 della memoria virtuale tu stai dicendo che il sistema deve solamente usare la memoria fisica e non il disco per lo swap ma il concetto di "indirizzo virtuale" convertito in "fisico" rimane inalterato.

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo