私たちの製品ではmalloc
、メモリ割り当てをmmapのみに依存する実装を使用しています。alloca
また、 ingのフェアユースも行っています。mmapがスタックスペースに予約する必要のある領域を割り当てるという問題が発生しました(したがって、より大きなアロカの1つがmallocされた領域に流出すると、非常に悪いことが起こります)。
プロセスの割り当ての制限は、物理メモリではなく、VMアドレス空間です。プロセスの実行中に/proc/ * / mapsファイルを監視し、mallocが使用可能なアドレス空間を使い果たすのを監視しました。最終的には、スタックのrlimit-set範囲内にアドレスを割り当てることに頼り、最終的には大幅に拡張さalloca
れます。
起動時にスタック制限全体を使用して回避alloca
しようとしましたが、プラットフォーム間で安定していることが証明されていません(alloca
2.6本番マシンで動作しているときに2.4開発ボックスのdメモリにアクセスしようとするとsegfaultsが発生します) 。
実際にアドレス空間を予約する方法はありますか?他に何ができますか?