soy nuevo en "fork()", leo en todas partes que cuando se llama fork() se inicia una copia exacta del proceso actual (de llamada). Ahora cuando ejecuto el siguiente código, debe haber dos procesos diferentes, teniendo dos ubicaciones de memoria diferentes asignadas a sus vars y funciones.¿Cómo se mapea la memoria cuando se usa la horquilla?
#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
Por qué tanto la dirección son los mismos para los padres, así como los niños?
Ellos * tenían mejor * ser lo mismo. Desea que los punteros hagan referencia a la memoria de la misma manera en ambos procesos (incluso si ambos fragmentos de memoria son distintos). Lea sobre * memoria virtual *, esto responderá a su pregunta. –
Tenga en cuenta que los * valores * de 'i' son diferentes entre padre e hijo, aunque ambas copias se almacenan en la misma dirección virtual. – markgz