連続したメモリのかなり大きなチャンク(〜1GB)を割り当てて初期化し、それを読み取り専用としてマークし、メモリの独自のコピーを作成せずに、それを使用する複数(たとえば数十)の子プロセスをフォークしたいと思います(マシンにはこれに十分なメモリがありません)。
いつものようにメモリを使用し、それmalloc
を読み取り専用としてマークすると、子プロセスがメモリをコピーせずに安全に使用できるようになると思いますか?(呼び出し後に割り当てられたメモリに何も書き込もうとしないことを確認することを条件とします)。mprotect(addr, size, PROT_READ)
fork
mprotect
編集:すべての答えをありがとう。
フォローアップの質問-使用することを計画していましたが、使用するため、より小さな割り当てに制限されるとshmget
思いました(このページの「制限」セクションを参照)。たとえば、これを使用しているサーバーでは32MBです。しかし、私は1GBの連続したメモリが必要です。この制限について間違っていますか?mm
/proc/sys/kernel/shmmax