FreeBSD と大きな mmap で問題が発生しています。Linux では同じ問題は発生しません。
プログラムの起動時に、常に 1 GB のマップを取得できます。ただし、ファイルが置き換えられて再マップされるリロード操作があります。通常、新しいマップは毎回少しだけ大きくなるため、古い mmap の場所にはうまく収まりません。このリマップは、FreeBSD ではしばしば失敗しますが、Linux ではほとんど失敗しません。(ASLR を使用する Linux ではより頻繁に失敗します。FreeBSD はASLRを使用しますか?)
これは、ライブラリが他のライブラリをロードし、プログラムの実行中に仮想メモリ空間を断片化するメモリ割り当てが行われたためだと思います。おそらく、これを引き起こす FreeBSD の malloc 実装またはライブラリのロードの特殊性があります。
私はそれが機能する可能性を高めるためにできることを探しています。
私が考えていることの 1 つは、ファイル サイズが実際には 890 MB であっても、常に 1 GB のスペース全体を mmap することです。私がそれを機能させることができれば、新しい 895 MB ファイルを再マップするための 1 GB スロットを常に確保できます。