Due programmi C che condividono gli stessi indirizzi

0

Stavo cercando di capire il riempimento della struttura, quindi ho scritto un semplice programma come scritto di seguito e l'ho eseguito. per chiarire ho fatto due copie di questo programma program1.c e program2.c ed eseguito entrambi insieme per vedere l'indirizzo del membro ma qualcosa di strano si avvicinò Entrambi i programmi mi danno lo stesso risultato, come se avessero esattamente gli stessi indirizzi Voglio sapere cosa succede esattamente internamente?

Program1.c

    #include<stdio.h>
struct pad{
short int a[5];
int b;
char c;
} y;

int main()
{
    int size = sizeof(y); 
    printf (" size %d byte",size);

    y.b = 10;
    printf ("\n address of member 1 is  %d \n",&y.a);
    printf (" address of member 2 is  %d \n",&y.b);
    printf (" address of member 3 is  %d \n",&y.c);    


    getch ();    
}

Output del programma

size 20 byte
 address of member 1 is  4210784
 address of member 2 is  4210796
 address of member 3 is  4210800

Questo è program2.c

include<stdio.h>

struct pad{

short int a[5];
int b;
char c;
} x;

int main()
{
    int size = sizeof(x); 
    printf (" size %d byte",size);


    printf ("\n address of mem 1 is  %d \n",&x.a);
    printf (" address of mem 2 is  %d \n",&x.b);
    printf (" address of mem 3 is  %d \n",&x.c);
//    printf (" size %d byte",size);



    getch ();    
}

Output del secondo programma

size 20 byte
 address of member 1 is  4210784
 address of member 2 is  4210796
 address of member 3 is  4210800

Sto usando l'architettura a 32 bit di Windows 7 e Dev-c ++

    
posta user143252 30.08.2016 - 00:14
fonte

1 risposta

7

Questo è il risultato della memoria virtuale. Approssimativamente, la memoria virtuale fornisce ad ogni programma in esecuzione l'illusione che tutta la memoria del sistema sia a sua disposizione. Presenta ciascun programma con uno spazio di indirizzo virtuale astratto e il sistema operativo e gli indirizzi della mappa della CPU nello spazio di memoria virtuale astratto in posizioni nella memoria fisica. La memoria fisica può essere RAM o potrebbe essere una memoria lenta come blocchi su un'unità disco. Un effetto collaterale di questo è che più copie dello stesso programma in esecuzione sembrano avere gli stessi indirizzi per le loro variabili. Puoi leggere Che cosa ogni programmatore dovrebbe sapere sulla memoria per informazioni più dettagliate.

    
risposta data 30.08.2016 - 01:30
fonte

Leggi altre domande sui tag