Linuxのfork()はプロセスヒープ全体を即座にコピーしますか?

Linuxのfork()はプロセスヒープ全体を即座にコピーしますか?

fork()システムコール実行中のプロセスから子プロセスを複製します。 PIDを除いて、両方のプロセスは同じです。

もちろん、プロセスが書き込みの代わりにヒープから読み取るだけの場合、ヒープをコピーすると多くのメモリが無駄になります。

フルプロセスヒープはコピーされますか?書き込みのみヒープコピーをトリガするように最適化されていますか?

ベストアンサー1

Linuxカーネルは、fork()呼び出し時にCopy-on-Writeを実装します。親と子が共有するページは、システムコールが行われたときに読み取り専用として表示されます。

読み取り専用ページで書き込み操作を実行すると、2 つのプロセス間のメモリがもはや同一ではないため、ページがコピーされます。したがって、読み取り操作のみを実行すると、ページはまったくコピーされません。

おすすめ記事