sono nuovo di "fork()", ho letto ovunque che quando viene chiamato un fork() viene avviata una copia esatta del processo corrente (chiamata). Ora quando eseguo il codice seguente, ci dovrebbero essere due processi diversi, avendo due diverse posizioni di memoria assegnate alle loro vars e funzioni.Come viene mappata la memoria quando si utilizza la forcella?
#include<stdio.h>
int i=10;
int pid;
int main(){
if((pid=fork())==0){
i++;//somewhere I read that separate memory space for child is created when write is needed
printf("parent address= %p\n",&i);// this should return the address from parent's memory space
}else{
i++;
i++;
printf("child address= %p\n",&i);// this should return the address of child's memory space
}
wait(0);
return(0);
}
Why The output looks like:: child address::804a01c parent address::804a01c
Perché sia l'indirizzo sono gli stessi per il genitore e bambino?
Loro * erano migliori * essere lo stesso. Si desidera che i puntatori facciano riferimento alla memoria nello stesso modo in entrambi i processi (anche se entrambi i blocchi di memoria sono distinti). Leggi di * memoria virtuale *, questo risponderà alla tua domanda. –
Si noti che i valori * di 'i' sono diversi tra padre e figlio, anche se entrambe le copie sono memorizzate nello stesso indirizzo virtuale. – markgz