Quelqu'un s'il vous plaît clarifier ce qui se passe avec les pointeurs après une fourchette(). Si je comprends bien, les pointeurs vers tout ce qui est sur la pile ou alloués statiquement sont relatifs aux registres de la pile/du segment de données, donc les copier exactement pendant une bifurcation est OK.Qu'arrive-t-il aux pointeurs vers la mémoire allouée dynamiquement après une fourche UNIX?
Cependant, que se passe-t-il si je malloc() quelque chose avant de forking? par exemple:
void* p = malloc(64);
// put something in *p;
fork();
// what happens to p and the memory i allocated here?
possibilités
Je pense à:
* p est copié dans une autre partie du tas, p est mis à jour pour refléter l'emplacement nouvellement copié.
p pointe toujours vers l'original. si un enfant est libre (p); le parent peut être incapable d'y accéder.
p pointe toujours vers les données d'origine, mais le processus enfant n'a pas les droits d'accès/de gestion de la mémoire.
lesquels, s'il y en a, sont corrects?
Les pointeurs pointent toujours vers la même adresse mémoire. Ce qui est mis à jour est le mappage virtuel. Pointeur -> adresse virtuelle -> adresse physique réelle. – jweyrich
duplication possible de [Pointeurs de référence après un fork() appel en C] (http://stackoverflow.com/questions/4393933/referencing-pointers-after-a-fork-call-in-c) –
duplicata de [Plus précisément , comment fork() gère-t-il la mémoire dynamiquement allouée depuis malloc() sous Linux?] (http://stackoverflow.com/questions/4597893/specifically-how-does-fork-handle-dynamically-allocated-memory-from-malloc -i) – IanNorton