2011-09-09 49 views
2

我在一個算法的並行實現上進行編程,該算法使用非線程安全操作。因此,我使用fork()和POSIX共享內存,它工作正常。現在的問題。當孩子退出時,父母的動態分配記憶會發生什麼? 的代碼看起來像這樣fork和內存分配

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

如果您在分配之前分配,則必須在父和子中釋放它。 – 2017-02-25 22:36:51

+0

但是如果你在fork之後分配,你必須釋放你分配的進程。 – 2017-02-25 22:43:08

回答

0

如果代碼看起來完全如圖所示,則不會產生內存泄漏。如你所說,這個孩子在退出之前釋放所有的記憶。 valgrind可能會有一些問題會計fork ed進程。

+0

孩子只釋放自己分配的內存,而不是先前由父進程分配的內存。 –