1. ホーム
  2. linux

Linux (およびその他のプラットフォーム) では malloc はアロケーションのためのバッキングページを遅延して作成しますか?

2023-11-23 14:42:18

質問

Linux で、もし私が malloc(1024 * 1024 * 1024) のように、mallocは実際に何をするのでしょうか?

私は、それが割り当てに仮想アドレスを割り当てることを確信しています (空きリストを歩いて、必要であれば新しいマッピングを作成することによって)、しかしそれは実際に 1 GiB 相当のスワップページを作成するのでしょうか? または、それは mprotect のようにアドレスの範囲を指定して、実際に触れたときにページを作成するのでしょうか? mmap のように実際に触れたときにページを作成するのですか?

(Linuxを指定しているのは は標準の がこの種の詳細について沈黙しているからです。しかし、他のプラットフォームがどうなっているのか知りたいですね)。

どのように解決するのですか?

Linuxは遅延ページ割り当て、別名「楽観的メモリ割り当て」を行います。malloc から戻ってくるメモリは何にもバックアップされておらず、それに触れたときに実際に OOM 状態 (要求したページのスワップ領域がない場合) になることがあり、その場合は プロセスが無情にも終了してしまいます。 .

例えば http://www.linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html