Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fork和内存分配_C_Memory Leaks_Malloc_Fork - Fatal编程技术网

C fork和内存分配

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

我在一个算法的并行实现上编程,该算法使用非线程安全操作。因此,我使用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进程时可能会遇到一些问题。

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

子进程只释放它自己分配的内存,而不是以前由父进程分配的内存。子进程只释放它自己分配的内存,不是父进程以前分配的内存。如果在fork之前分配,则必须在父进程和子进程中释放内存。但是如果在fork之后分配,则必须在分配的进程中释放内存。如果在fork之前分配,则必须在父进程和子进程中释放内存。但是如果在fork之后分配,您必须在分配的过程中释放。