Linuxでは
匿名メモリマッピングに mmap() を使用する場合、または malloc() を使用する場合は、物理メモリでのみ「空間」を割り当てるのですか、それとも物理メモリやスワップ、またはそれらの組み合わせから「空間」を割り当てますか? (後者ではないかと思います)
System V 共有メモリーを使用する場合 (例: shmget())、物理メモリー、物理メモリー、スワップ、またはこれらの組み合わせでのみ共有メモリーセグメントを作成しますか? (共有メモリは高速IPCメカニズムと呼ばれているため、前者だと思います)
POSIX共有メモリを使用する場合、shm_open()などは物理メモリからのみ共有メモリオブジェクトを作成しますか、それとも物理メモリ、スワップ、またはそれらの組み合わせからのみ作成しますか? (共有メモリは高速IPCメカニズムと呼ばれているため、前者だと思います)
ありがとうございます。
答え1
彼らが割り当てるならメモリとにかく彼らはそれをスワップ空間に保ちます。
mmap
、malloc
およびshmget
Linuxでは、呼び出しプロセスのアドレス空間にスペースを割り当てます。スペースはスワップスペースmmap
にもshmget
予約できます(MAP_NORESERVE
または指定されていない場合)。SHM_NORESERVE
彼らはサポートを割り当てません物理メモリ。shm_open
また、メモリを割り当てることもありません。既存のオブジェクトを開くか、長さゼロの新しいオブジェクトを作成するために使用されます。
アドレス空間のアドレスが逆参照されると、物理メモリページが割り当てられます。可能であれば、この割り当ては常に物理メモリで行われます。そうしないと、プロセスはそこから読み書きできません。ロックされていないメモリに割り当てて書き込んだ後できる交換されますが、後でそのようなことが起こります。
(「予約」はプロセスのために対応する記憶領域を予約することを意味し、「割り当て」は特定のリソースをプロセスに割り当てることを意味する。例えば仮想アドレス空間のアドレスまたはメモリのページです。 )