Alguien aclare qué sucede con los punteros después de un tenedor().¿Qué sucede con los punteros a la memoria asignada dinámicamente después de una horquilla UNIX?
Según tengo entendido, los punteros a cualquier elemento de la pila o asignados estáticamente son relativos a los registros del segmento de pila/datos, por lo que copiarlos exactamente durante un fork está bien.
Sin embargo, ¿qué sucede si malloc() algo antes de bifurcar? por ejemplo:
void* p = malloc(64);
// put something in *p;
fork();
// what happens to p and the memory i allocated here?
posibilidades que estoy pensando:
* p se copia en alguna otra parte del montón, p se actualiza para reflejar la ubicación que acaba de copiar.
p todavía se refiere al original. si algún niño se ejecuta gratis (p); el padre no puede tener acceso a él.
p sigue apuntando a los datos originales, pero el proceso secundario no tiene derechos para acceder a la memoria o administrarla.
¿cuál de estos, si corresponde, es el correcto?
Los punteros aún apuntan a la misma dirección de memoria. Lo que se actualiza es el mapeo virtual. Puntero -> dirección virtual -> dirección física real. – jweyrich
posible duplicado de [Hacer referencia a los punteros después de una llamada fork() en C] (http://stackoverflow.com/questions/4393933/referencing-pointers-after-a-fork-call-in-c) –
duplicar de [Específicamente , ¿cómo maneja fork() la memoria dinámicamente asignada de malloc() en Linux?] (http://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle-dynamically-allocated-memory-from-malloc -i) – IanNorton