Was passiert mit Zeigern auf dynamisch zugewiesenen Speicher nach einem UNIX-Fork?

8

Jemand klärt bitte auf, was mit Zeigern nach einem fork () passiert.

Wie ich es verstehe, sind Zeiger auf alles auf dem Stapel oder statisch zugewiesenen relativ zu den Stapel / Datensegmentregistern, so dass sie genau während einer Verzweigung kopiert werden, ist OK.

Was passiert jedoch, wenn ich vor dem Abzweigen etwas malloc () mache? zum Beispiel:

%Vor%

Möglichkeiten, an die ich denke:

  1. * p wird in einen anderen Teil des Heaps kopiert, p wird aktualisiert, um den neu kopierten Ort wiederzugeben.

  2. p zeigt immer noch auf das Original. wenn ein Kind frei läuft (p); Der Eltern kann möglicherweise nicht darauf zugreifen.

  3. p zeigt immer noch auf die ursprünglichen Daten, aber der untergeordnete Prozess hat keine Rechte, auf den Speicher zuzugreifen / diesen zu verwalten.

Welche davon ist, wenn überhaupt, richtig?

    
Dmitri 29.09.2011, 17:34
quelle

3 Antworten

12

Beim Verzweigen wird der untergeordnete Prozess eine Kopie des übergeordneten Elements. Das schließt dynamisch zugewiesenen Speicher ein. Also wird der Speicher kopiert. Zeigeradresse bleibt gleich (Kopie ändert keine Daten, erinnern Sie sich?), Was durch virtuelle Adressierung erreicht wird. Vergessen Sie nicht, free in den Eltern- und Kindprozessen aufzurufen.

    
user405725 29.09.2011, 17:37
quelle
2

Der Wert wird auch kopiert, wenn fork den Code, globals, heap und stack kopiert.

Quelle: Ссылка

    
Geoffroy 29.09.2011 17:37
quelle
0

Mallced-Speicher stammt aus dem Heap , was nur ein fantastisches Wort für eine Reihe von Speicherseiten ist. Da fork() alle Speicherseiten eines Prozesses kopiert, unabhängig davon, ob sie in Lehrbüchern auffällig benannt wurden, funktionieren Zeiger, die von fork () zurückgegeben werden, problemlos in dem untergeordneten Element: -)

    
Jens 29.09.2011 19:37
quelle

Tags und Links