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过程时可能存在一些问题。