引用元:https://www.ioccc.org/1996/schweikh3.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1996/schweikh3.hint
動作
OSがメモリのovercommitをするかどうかを調べるツールらしい。
システムに強く依存する(やや危険な香りのする)コードなので、動作確認はしていない。
解説
overcommitとは、プログラムが実メモリ以上のサイズのメモリを確保することを許すOSの機能。
実メモリ以上確保させるのは危険だけれど、マルチプロセス環境で各プロセスの確保しているメモリの合計を実メモリ以下に抑えるのは実用上厳しすぎるので、難しい問題。
当時は、Solarisはovercommitなし、FreeBSDはovercommitあり(実メモリが足りなくなったらプロセスを適当に殺す)、Linuxはpseudo overcommit(実メモリが足りなくなったらスワップに書き出す、スラッシングが発生する)だったらしい。
子プロセスでmalloc
できる最大メモリサイズを二分探索で探して、たぶんその中にアクセスすることで物理メモリを割り当てさせて、overcommitが行われているかどうかを調べる。
特に問題なくアクセスできればovercommitなし、子プロセスがSIGKILL
で殺されたらovercommitあり、非常に遅くなったらスラッシング発生とみなしてovercommitあり、と判定するらしい。
コードの特徴は、1カラム目に1文字のトークンをなるべく置くとか、変数名をプログラミング言語名にするとか。
[[1996/schweikh1]]と[[1996/schweikh2]]とあわせて、同じ人が同年に3部門で入賞するのは初の事例。