mallocが 0 のメモリを返すことは保証されていません。従来の知恵は、それだけでなく、メモリmallocの戻り値の内容は実際には非決定論的であるということです。たとえば、openssl は追加のランダム性のためにそれらを使用していました。
ただし、私の知る限り、mallocはbrk/sbrkの上に構築されており、これは 0 のメモリを「返す」ものです。mallocが返す内容が、たとえば以前に解放されたメモリから0 以外である理由はわかりますが、「通常の」シングルスレッドソフトウェアではなぜそれらが非決定論的でしょうか?
- 従来の知恵は本当に真実ですか (同じバイナリとライブラリを想定)
- もしそうなら、なぜですか?
編集上記の質問ですでに説明したように、メモリが0以外になる理由を説明する人が何人かいます。私が求めているのは、malloc が返す内容を使用するプログラムが非決定論的である可能性がある理由、つまり、実行するたびに異なる動作をする可能性がある理由です (同じバイナリとライブラリを想定して)。非決定的な動作は、非 0 によって暗示されません。別の言い方をすれば、バイナリが実行されるたびに異なる内容になる理由です。