我在一個算法的並行實現上進行編程,該算法使用非線程安全操作。因此,我使用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說是的,我沒有想法避免這種情況。不幸的是,跟蹤所有的內存分配是不可能的。
如果您在分配之前分配,則必須在父和子中釋放它。 – 2017-02-25 22:36:51
但是如果你在fork之後分配,你必須釋放你分配的進程。 – 2017-02-25 22:43:08