我在算法的并行实现上编程,该算法使用非线程安全的操作。因此我使用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说是的,我没有想法避免这种情况。遗憾的是,跟踪所有内存分配是不可能的。
答案 0 :(得分:0)
如果代码完全如图所示,则不会产生内存泄漏。正如你所说,孩子在退出前释放所有记忆。在考虑fork
ed过程时,valgrind可能会遇到一些问题。