私は自分のマシンで sbrk(1) を使用して試してみましたが、4096 バイトのページ サイズをテストするために意図的に範囲外に書き込みました。しかし、malloc(1) を呼び出すと、135152 バイトにアクセスした後に SEGV を取得します。これは、1 ページ サイズよりもはるかに大きい値です。malloc がライブラリ関数であり、実装に依存していることは知っていますが、最終的に sbrk を呼び出すことを考えると、なぜ複数のページ サイズが得られるのでしょうか。誰かがその内部作業について教えてもらえますか?
私のオペレーティング システムは ubuntu 14.04 で、アーキテクチャは x86 です。
更新: malloc が、データを保持するのに十分な大きさの空きリスト ブロックにアドレスを返すためかどうか疑問に思っています。しかし、そのアドレスはヒープの途中にある可能性があるため、ヒープの上限に達するまで書き込みを続けることができます。