
存在するこの回答StackOverflowでは、次のように言います。
たとえば、Linuxで実行時にファイルを読み取るのではなく、ソースからデータを初期化すると、データは.dataセクションに保存されます。このセグメントのサイズはカーネルオプションで制限できます。 ulimit -d を使用して現在の制限を見つけることができます。
私のLinuxとmacOSコンピュータでは、次のようになります。
$ ulimit -d
unlimited
.dataセクションにサイズ制限を設定したいのはなぜですか?
答え1
ulimit -d
最大サイズを設定します。プロセスデータセグメントの最大サイズだけでなくバイナリ.dataセクション。これにより、プロセスが使用できるメモリ量を制限できます。POSIX:
RLIMIT_DATA
これはプロセスデータセグメントの最大サイズ(バイト単位)です。この制限を超えるとmalloc()機能が失敗するエラー番号[ENOMEM]に設定します。
exec
データセグメント制限を持つプロセスは、データセグメント制限よりも大きい.dataセグメントを持つバイナリファイルを使用できないため、この制限はバイナリに適用されます。ただし、その後も制限は引き続き適用されるため、プロセスの実行中にデータセグメントはこの制限を超えて大きくすることはできません。
すべての制限と同様に、これは多くのシナリオに関連しています。マルチユーザーシステムでは、単一ユーザーがシステムリソースを排他したり、他のユーザーのシステム使用を妨げたりしないように制限を設定する必要があります。単一のプロセスがシステムリソースを排他できないように制限を設定することもできます(例えばWebブラウザまたは大規模ビルド...)。今、このタイプのリソース制御のためにLinuxシステムでcgroupのようなものを使用する方が良いでしょう。