私は大きなバッファを持っている:フォークなし)(フォークのコピー・オン・ライト動作をゲットING、()
char *buf = malloc(1000000000); // 1GB
私は新しいプロセスをフォークした場合、それはとメモリを共有しBUFを持っているでしょうどちらか一方がそれに書き込むまで、親のbuf。それでも、新しい4KiBブロックはカーネルによって1つだけ割り当てられる必要があり、残りは引き続き共有されます。
私はbufのコピーを作成したいと思いますが、私はコピーを少し変更するつもりです。私はフォークせずにコピーオンライトの動作をしたいです。 (あなたがフォークするときに自由に得るように)
これは可能ですか?
確かに、それは「無料」ではありません。あなた自身のメモリ管理を行い、変更を追跡する必要があります。 –
はい、私は「無料」したいです。私はmmapベースのソリューションがあるのか、それとも私が想像していなかったものがあるのか疑問に思っていました。 – fadedbee
おそらくMAP_ANONYMOUSとMAP_PRIVATEを使ったmmapがその仕事をしますか? – fadedbee