c-fork和内存分配



I在算法的并行实现上编程,该算法使用非线程安全操作。因此,我使用了fork((和POSIX共享内存,它运行良好。现在是问题。当孩子退出时,父母的动态分配内存会发生什么?代码看起来像这个

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; 
 }

问题是,我不知道从哪里调用compute,以及分配给它们的内存。我唯一希望我能保证的是,父母分配的内存只能在孩子身上只读。由子级分配的动态分配内存由子级释放。这是否会导致内存泄漏?Valgrind答应了,我不知道该怎么避免。遗憾的是,无法跟踪所有内存分配。

如果代码看起来完全如图所示,则不会产生内存泄漏。正如你所说,孩子在退出之前会释放所有内存。valgrind在核算fork ed过程时可能存在一些问题。

相关内容

  • 没有找到相关文章

最新更新