スレッドセーフでない操作を使用するアルゴリズムの並列実装でプログラミングします。したがって、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ははいと言っています。私はこれを避ける考えを持っていません。すべてのメモリ割り当てをトラッキングすることは残念ながら不可能です。
forkの前に割り当てる場合は、親と子の両方で解放する必要があります。 –
しかし、forkの後に割り振った場合、割り振ったプロセスを解放する必要があります。 –