C fork和内存分配
我在一个算法的并行实现上编程,该算法使用非线程安全操作。因此,我使用fork()和POSIX共享内存,这很好。现在是问题。当子进程退出时,父进程的动态分配内存会发生什么情况? 代码如下所示C fork和内存分配,c,memory-leaks,malloc,fork,C,Memory Leaks,Malloc,Fork,我在一个算法的并行实现上编程,该算法使用非线程安全操作。因此,我使用fork()和POSIX共享内存,这很好。现在是问题。当子进程退出时,父进程的动态分配内存会发生什么情况? 代码如下所示 int compute(....) { // prepare shared memory pid_t child = fork(); if ( child == 0 ) { // process the child code int *workspace = malloc(worksi
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进程时可能会遇到一些问题。如果代码完全如图所示,则不会产生内存泄漏。正如你所说,孩子在退出之前释放了所有的记忆。valgrind在处理fork
ed进程时可能会遇到一些问题。子进程只释放它自己分配的内存,而不是以前由父进程分配的内存。子进程只释放它自己分配的内存,不是父进程以前分配的内存。如果在fork之前分配,则必须在父进程和子进程中释放内存。但是如果在fork之后分配,则必须在分配的进程中释放内存。如果在fork之前分配,则必须在父进程和子进程中释放内存。但是如果在fork之后分配,您必须在分配的过程中释放。