Я программирую на параллельную реализацию алгоритма, который использует не потокобезопасные операции.Поэтому я использую fork () и POSIX-Shared Memory, которая отлично работает.Теперь вопросы.Что происходит с динамически выделяемой памятью родителя, когда ребенок выходит?Код выглядит так:
int compute(....) {
// prepare shared memory
pid_t child = fork();
if ( child == 0 ) {
// process the child code
int *workspace = malloc(worksize*sizeof(int));
// copy the result to Shared memory
free(workspace);
exit(0);
}
// do parents work
wait(&status);
// retrieve results from shared memory
return 0;
}
Проблема в том, что я не знаю, откуда вызываются вычисления и какая память выделяется их.Единственное, что я надеюсь получить, - это память, выделенная родителем, которая используется только для чтения только у ребенка.Динамически распределенная память, выделенная ребенку, освобождается ребенком.Это вызывает утечку памяти или нет?Вальгринд говорит «да», и у меня нет идеи избежать этого.Отслеживание всех выделений памяти, к сожалению, невозможно.