このコード行は何をしますか?
mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
n
メモリのバイトのプライベートで書き込み可能な匿名マッピングを要求します。
fork()
子と親が独立したマッピングを持つようになった後)。この場合、基本的n
にメモリのバイトのブロックを要求しているため、ほぼ同等です(ただし、ではなくmalloc(n)
で解放する必要があり、ページ境界で整列されます)。また、メモリが書き込み可能であることを要求していますが、読み取り可能であることは要求していませんが、通常、書き込み可能メモリと読み取り不能メモリは、基盤となるハードウェアでサポートされている組み合わせではありません。単独で要求された場合、POSIX では、実装が読み取りおよび/または実行可能なメモリを提供できます。munmap()
free()
PROT_WRITE
man mmap
ここであなたを助けます。
プロセスの仮想アドレス空間にメモリ マッピングを作成します。匿名マッピングを作成しています。これは、メモリのバイトmalloc
を割り当てるために使用するのと似ています。n
パラメータは次のとおりです。
NULL
- カーネルはマッピング用のアドレスを選択しますn
- マッピングの長さ (バイト単位)PROT_WRITE
- ページを書き込むことができますMAP_ANON | MAP_PRIVATE
- マッピングはファイルによってサポートされず、マッピングに書き込まれた更新はプロセスに対してプライベートです-1
- ファイル記述子; マッピングがファイルによってサポートされていないため、使用されません0
- マッピングを開始するファイル内のオフセット - ここでも、マッピングはファイルによってサポートされていないため、使用されません