13

このコード行は何をしますか?

mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
4

2 に答える 2

14

nメモリのバイトのプライベートで書き込み可能な匿名マッピングを要求します。

  • プライベート マッピングは、他のプロセスと共有されないことを意味します (たとえば、fork()子と親が独立したマッピングを持つようになった後)。
  • 匿名のマッピングは、ファイルによってサポートされていないことを意味します。

この場合、基本的nにメモリのバイトのブロックを要求しているため、ほぼ同等です(ただし、ではなくmalloc(n)で解放する必要があり、ページ境界で整列されます)。また、メモリが書き込み可能であることを要求していますが、読み取り可能であることは要求していませんが、通常、書き込み可能メモリと読み取り不能メモリは、基盤となるハードウェアでサポートされている組み合わせではありません。単独で要求された場合、POSIX では、実装が読み取りおよび/または実行可能なメモリを提供できます。munmap()free()PROT_WRITE

于 2010-09-04T11:31:11.773 に答える
11

man mmapここであなたを助けます。

プロセスの仮想アドレス空間にメモリ マッピングを作成します。匿名マッピングを作成しています。これは、メモリのバイトmallocを割り当てるために使用するのと似ています。n

パラメータは次のとおりです。

  • NULL- カーネルはマッピング用のアドレスを選択します
  • n- マッピングの長さ (バイト単位)
  • PROT_WRITE- ページを書き込むことができます
  • MAP_ANON | MAP_PRIVATE- マッピングはファイルによってサポートされず、マッピングに書き込まれた更新はプロセスに対してプライベートです
  • -1- ファイル記述子; マッピングがファイルによってサポートされていないため、使用されません
  • 0- マッピングを開始するファイル内のオフセット - ここでも、マッピングはファイルによってサポートされていないため、使用されません
于 2010-09-04T11:30:44.100 に答える