分叉和内存分配

时间:2011-09-09 08:52:09

标签: c memory-leaks malloc fork

我在算法的并行实现上编程,该算法使用非线程安全的操作。因此我使用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; 
 }

问题是我不知道从哪里调用了计算以及分配了哪些内存。我希望我唯一可以接受的是父母分配的内存仅在子代中使用。由孩子分配的动态分配的内存由孩子释放。 这是否会导致内存泄漏? Valgrind说是的,我没有想法避免这种情况。遗憾的是,跟踪所有内存分配是不可能的。

1 个答案:

答案 0 :(得分:0)

如果代码完全如图所示,则不会产生内存泄漏。正如你所说,孩子在退出前释放所有记忆。在考虑fork ed过程时,valgrind可能会遇到一些问题。