распределение вилки и памяти - PullRequest
2 голосов
/ 09 сентября 2011

Я программирую на параллельную реализацию алгоритма, который использует не потокобезопасные операции.Поэтому я использую 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; 
 }

Проблема в том, что я не знаю, откуда вызываются вычисления и какая память выделяется их.Единственное, что я надеюсь получить, - это память, выделенная родителем, которая используется только для чтения только у ребенка.Динамически распределенная память, выделенная ребенку, освобождается ребенком.Это вызывает утечку памяти или нет?Вальгринд говорит «да», и у меня нет идеи избежать этого.Отслеживание всех выделений памяти, к сожалению, невозможно.

1 Ответ

0 голосов
/ 09 сентября 2011

Если код выглядит точно так, как показано, утечки памяти не происходит. Как вы говорите, ребенок освобождает всю свою память перед выходом. У valgrind могут возникнуть проблемы с учётом fork ed процессов.

...