что происходит с указателями на динамически выделенную память после форка UNIX?

Кто-нибудь, пожалуйста, объясните, что происходит с указателями после fork().

Как я понимаю, указатели на что-либо в стеке или статически выделенное являются относительными к регистрам стека/сегмента данных, поэтому копирование их точно во время форка - это нормально.

Однако, что произойдет, если я malloc() что-то перед форком? Например:

void* p = malloc(64);
// put something in *p;
fork();

// what happens to p and the memory i allocated here?

возможности, о которых я думаю:

  1. *p копируется в какую-то другую часть кучи, p обновляется, чтобы отразить новое скопированное местоположение.

  2. p все еще указывает на оригинал. если какой-либо потомок выполнит free(p), родитель может быть не в состоянии получить к нему доступ.

  3. p по-прежнему указывает на исходные данные, но дочерний процесс не имеет прав на доступ/управление памятью.

что из этого, если таковое имеется, верно?

9
задан Dmitri 29 September 2011 в 17:34
поделиться