ホームページ >バックエンド開発 >C++ >GNU コンパイラを使用して Linux 上の C アプリケーションのスタック サイズを調整するにはどうすればよいですか?

GNU コンパイラを使用して Linux 上の C アプリケーションのスタック サイズを調整するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 02:52:08598ブラウズ

How to Adjust the Stack Size for C   Applications on Linux Using GNU Compiler?

GNU コンパイラーを使用した Linux での C アプリケーションのスタック サイズの調整

Linux では、GNU コンパイラーでコンパイルされた C アプリケーションのスタック サイズスタック オーバーフロー エラーを防ぐために変更できます。 OSX で使用される構文 (LD_FLAGS= -Wl,-stack_size,0x100000000) は SUSE Linux では機能しない可能性がありますが、同じ結果を達成する別の方法があります。

1 つのアプローチは、プログラムでスタック サイズを増やすことです。アプリケーション自体。これは、 によって提供される setrlimit 関数を使用して行うことができます。ヘッダファイル。以下に例を示します。

#include <sys/resource.h>

int main(int argc, char **argv) {
  const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB
  struct rlimit rl;
  int result;

  result = getrlimit(RLIMIT_STACK, &rl);
  if (result == 0) {
    if (rl.rlim_cur < kStackSize) {
      rl.rlim_cur = kStackSize;
      result = setrlimit(RLIMIT_STACK, &rl);
      if (result != 0) {
        fprintf(stderr, "setrlimit returned result = %d\n", result);
      }
    }
  }

  // ...

  return 0;
}

アプリケーション内のスタック サイズを増やすことで、スタック オーバーフロー エラーが発生することなく、複雑な操作や大規模なデータ構造を処理するのに十分なメモリ割り当てを確保できます。ただし、getrlimit/setrlimit コードが有効になる前に、スタック オーバーフローを防ぐために、過度に大きなローカル変数を main から呼び出される関数で宣言する必要があることに注意することが重要です。

以上がGNU コンパイラを使用して Linux 上の C アプリケーションのスタック サイズを調整するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。