Curiosità in merito a variabili e RAM

di il
53 risposte

Curiosità in merito a variabili e RAM

Ciao a tutti
Questo è il mio primo anno che programmo in quanto sono in 3 all'ITIS e non sono così esperto..
Nonostante ciò mi è sorta una curiosità:
Quando dichiaro una variabile mi rifesco a una zona della memoria RAM sul PC. La mia curiosità sarebbe se è possibile vedere dove e precisamente posizionata nella memoria RAM. È possibile?
Grazie

53 Risposte

  • Re: Curiosità in merito a variabili e RAM

    Dipende in realtà...
    Perché a informatica usiamo C#
    A sistemi e reti Assembly 8086
    A TPS usiamo C++


    Inviato dal mio HUAWEI P7-L10 utilizzando Tapatalk
  • Re: Curiosità in merito a variabili e RAM

    ultrasound91 ha scritto:


    
    #include <iostream>
    
    using namespace std;
    
    int main() {
        int numero = 10;
        cout << "L'indirizzo e': " << &numero << endl;
        return 0;
    }
    
    Grazie mille

    Inviato dal mio HUAWEI P7-L10 utilizzando Tapatalk
  • Re: Curiosità in merito a variabili e RAM

    In realtà quello è un indirizzo virtuale, con gli odierni PC non si può vedere la reale posizione della memoria.
  • Re: Curiosità in merito a variabili e RAM

    ultrasound91 ha scritto:


    Io di più non so fare.
    Non mi pare che sia questo il problema... Il fatto è che la risposta che hai dato non è parziale ma sbagliata.

    Anche il fatto che non serva non è importante ... Lui ha fatto una domanda teorica e gli si deve rispondere correttamente, se si sa rispondere.
  • Re: Curiosità in merito a variabili e RAM

    ultrasound91 ha scritto:


    Si hai ragione, ho riletto il primo post, lui hai chiesto "dove e precisamente".
    Non importa tanto se ha chiesto "precisamente" ma ha chiesto dove "nella RAM" ... riferendosi quindi ad un indirizzo "fisico".

    In effetti, il dato potrebbe stare, in un determinato momento, nel disco ...
  • Re: Curiosità in merito a variabili e RAM

    E' vero ma disabilitare il page file può portare a crash improvvisi del sistema se in un certo momento non c'è memoria disponibile (anche con 16 G può succedere ad un certo punto ...)
  • Re: Curiosità in merito a variabili e RAM

    ultrasound91 ha scritto:


    Mai successo perchè non apro i programmi a caso
    Questo non ha senso perché non importa cosa "apri tu" ma cosa fa il "sistema", indipendentemente da te ... Tutti i servizi (processi in background in generale) tentano sempre di avviarsi e allocano memoria per le proprie necessità (pensa agli antivirus, firewall, updater da quello di Windows stesso a quello dei vari programmi ... ecc... prova ad installare SQL Server dicendogli di gestire da solo la memoria ...).

    In tutti i casi, disabilitare il page file non è comunque consigliato (da tanti esperti del settore oltre che da da MS stessa ...). E il motivo è semplice ... il page file viene usato quando è necessario, non sempre. Il disco quindi è utilizzato solo se serve e se serve vuol dire che in quel momento la memoria non è più sufficiente ...
  • Re: Curiosità in merito a variabili e RAM

    Questo è il mio primo anno che programmo in quanto sono in 3 all'ITIS e non sono così esperto..
    Nonostante ciò mi è sorta una curiosità:
    Quando dichiaro una variabile mi rifesco a una zona della memoria RAM sul PC. La mia curiosità sarebbe se è possibile vedere dove e precisamente posizionata nella memoria RAM. È possibile?
    La risposta e' ovviamente: si e' possibile.

    Ma che cosa voglia dire questo e' possibile dipende da quanto in dettaglio si vuole andare.

    Se si intende all'interno del processo corrente, il modo e' quello di utilizzare l'operatore addressof che alcuni linguaggi di programmazione mettono a disposizione, come, appunto, l'operatore & del C/C++.

    In C# esiste l'operatore & ma per usarlo devi usare anche fixed ed indicare che il codice e' unsafe.

    In assembler usi esplicitamente l'indirizzo (virtuale) della locazione di memoria.

    Altri linguaggi, invece, quelli basati su Garbage Collector, nascondono completamente l'indirizzo di memoria. Questo perche' questo indirizzo puo' cambiare al runtime, senza che il programma se ne debba accorgere.

    Ma questo operatore fornisce solo l'indirizzo della locazione di memoria all'interno del processo corrente, appunto.
    
    #include <stdio.h>
    
    int main()
    {
        int x;
        printf("%08Xld\n", &x);
        getchar();
    
        return 0;
    }
    
    Se lanci due volte lo stesso processo, otterrai sempre lo stesso indirizzo, il che, ovviamente, non ha senso!

    Per arrivare al vero indirizzo fisico, e' necessario entrare a livello di Sistema Operativo.

    E' infatti responsbilita' del SO quello di assegnare la memoria ai singoli processi, secondo uno schema denominato memoria virtuale.



    Piu' specificatamente, la memoria assegnata ai vari processi e' responsabilita' del Memory Manager il quale ha il compito di gestire la memoria virtuale assegnata ai vari processi e mapparla nella memoria fisica (quella rappresentata dai banchi di memoria montati fisicamente).

    La memoria virtuale di ogni processo viene suddivisa in segmenti, ogni segmento in pagine.

    Il MM ha il compito di tenere traccia delle pagine in uso da parte di ogni processo, e della loro posizione all'interno della memoria fisica.

    Una volta che conosci l'indirizzo virtuale di una variabile, entrando a livello di SO puoi risalire a quale pagina di quale segmento fa riferimento, e da questo alla posizione della pagina nella memoria fisica.

    Banale


    @ultrasound [1]:
    non ho mai visto nessuno disturbarsi a leggere un vettore saltando ad intervalli regolari gli indirizzi.
    E' normale pratica quando si utilizzano i tensori, vettori N dimensionali.
    E si, vengono allocati in un'unica area di memoria contigua perche' in questo modo si possono implemetare le operazioni vettoriali in modo estremamemnte efficiente.

    Se il vettore a N dimensioni fosse implementato come vettore di vettori di vettori di ... di float/double, si perderebbe il 90% dlle performance.

    @ultrasound[2]:
    Si vero, file paging.
    A casa mia comunque non si usa più.
    Questo perche' ragioni ancora in termini di PC per uso casereccio (mail, skype o navigare in Internet).

    Gia' quando inizi ad utilizzare applicazioni piu' complesse, come Photoshop, software per la modellazione 3D, ti accorgi della necessita' di avere un'adeguata disponibilita' di memoria virtuale.

    Io non uso il PC per giocare, ma da quanto so, i giochi piu' moderni richiedono abbondanti quantita' di memoria, superiori, mediamente, alla quantita' di memoria fisica disponibile.

    Per non parlare, ovviamente, dei server (Web Server, Mai Server, ...) che non possono permettersi di andare in crash perche' non c'e' piu' memoria fisica! Ma non e' un problema se rallentano.
  • Re: Curiosità in merito a variabili e RAM

    memoria virtuale di ogni processo viene suddivisa in segmenti, ogni segmento in pagine
    Io sapevo che si usava o una o l'altra, almeno mi ricordo di aver letto ad esempio che i sistemi unix usano l'impaginazione mentre quelli MS la segmentazione, ricordo male?

    Il crash non è immediato alla fine della memoria, almeno non sempre perché il kernel può mettere in attesa il processo fino a che si liberi lo spazio richiesto.
  • Re: Curiosità in merito a variabili e RAM

    @vbextreme: paginazione non impaginazione (oregon mi ha cazziato per un errore simile )

    MS usava la sola segmentazione quando ancora si era a 16 bit e un segmento al piu' era 64kb.
    Oggi con i sistemi a 32 e 64 bit si usano entrambe le tecniche:
    i segmenti sono almeno 2: codice e dati. Poi si possono aggiungere stack, diversi heap (con le API di Windows ne puoi creare quanti ne vuoi) e i memori mapped file.
    Siccome ogni segmento puo' avere fino a 2/4 GB (32 bit) o diversi TB (64 bit), entra in gioco il sistema della paginazione.

    Trovi dettagli estremamente precisi nella documentazione dell'assembler Intel.
    Il processore mette a disposizione tutte le primitive per la gestione della memoria virtuale, usate poi dal SO.

    Cerca 64 ia 32 architecture software developer system programming
  • Re: Curiosità in merito a variabili e RAM

    migliorabile ha scritto:


    @vbextreme: paginazione non impaginazione (oregon mi ha cazziato per un errore simile )

    Meno male che l'hai fatto tu ... stavo già scrivendo...
  • Re: Curiosità in merito a variabili e RAM

    Embe'?
  • Re: Curiosità in merito a variabili e RAM

    Ultra... Hai scritto una marea di ultrastupidaggini..

    Che cos'è un computer casareccio? Che dici? Che pensi di dire? È comunque un sistema che lavora come tutti gli altri...

    Se apri un'immagine o 10 immagini in Photoshop la memoria richiesta è sempre la stessa?

    Parli di cose che non conosci dando dello stupido a chi le studia da tempo? Se si attiva un processo in bg tu lo fermi? E che sei mandrake?

    E che cavolo c'entra la formattazione? Chi la consiglia? Dove trovi questi esperti?

    Ma tu studi informatica?
  • Re: Curiosità in merito a variabili e RAM

    Il mio italiano non si smentisce mai!
    effettivamente il libro parlava dei chip fino al 286...vecchiotto...

    Io a volte ho 4/5 programmi aperti a desktop, dato che ho 4 desk allora fanno mediamente dai 15 programmi in su.......Sono più multitask del mio PC.
    Riuscire a non formattare MS ogni x giorni è impresa ardua per un computer casalingo, come tu lo chiami, su cui ci si fa di tutto, anche per quello sono passato a linux e ora non so neanche più cos'è la cartella prefetch o il registro o altre menate simili.
Devi accedere o registrarti per scrivere nel forum
53 risposte