Qualcuno si prega di chiarire cosa succede con i puntatori dopo un fork().cosa succede ai puntatori alla memoria allocata dinamicamente dopo un fork UNIX?
Come ho capito, i puntatori a qualsiasi cosa sullo stack o allocati staticamente sono relativi ai registri stack/data segment, quindi copiarli esattamente durante un fork è OK.
Tuttavia, cosa succede se malloc() qualcosa prima di biforcarsi? per esempio:
void* p = malloc(64);
// put something in *p;
fork();
// what happens to p and the memory i allocated here?
possibilità Sto pensando di:
* p viene copiato qualche altra parte del mucchio, p viene aggiornato per riflettere la posizione appena copiato.
p fa ancora riferimento all'originale. se un bambino corre libero (p); il genitore potrebbe non essere in grado di accedervi.
p punta ancora ai dati originali, ma il processo figlio non dispone dei diritti per accedere/gestire la memoria.
quale di questi, se presente, è corretto?
I puntatori puntano ancora allo stesso indirizzo di memoria. Ciò che viene aggiornato è la mappatura virtuale. Puntatore -> indirizzo virtuale -> indirizzo fisico reale. – jweyrich
possibile duplicato di [Puntatori di riferimento dopo una chiamata a fork() in C] (http://stackoverflow.com/questions/4393933/referencing-pointers-after-a-fork-call-in-c) –
duplicato di [Specificamente , in che modo fork() gestisce la memoria allocata dinamicamente da malloc() in Linux?] (http://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle-dynamically-allocated-memory-from-malloc -i) – IanNorton