Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

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.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
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?


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

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


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
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?


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

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 ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
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


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

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?


Solo Puffin ti dà Forza e Grinta a Volontà
------------------------------------------
Dijkstra:"I collaudi mostrano la presenza di errori, non la loro assenza.
Non si può provare che un progamma è corretto, ma solo che è scorretto"

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.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo