ホームページ > バックエンド開発 > C++ > Linux でコンパイル中に C アプリケーションのスタック サイズを変更するにはどうすればよいですか?

Linux でコンパイル中に C アプリケーションのスタック サイズを変更するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-27 17:17:10
オリジナル
571 人が閲覧しました

How to Modify C   Application Stack Size in Linux During Compilation?

GNU コンパイラーを使用したコンパイル中に Linux で C アプリケーションのスタック サイズを変更する

macOS とは対照的に、g による C コンパイル中に LD_FLAGS を使用してスタック サイズを指定できます。 , SUSE Linux などの Linux ディストリビューションでは、このようなコマンドが発生するとエラーが表示されます。この問題は、Linux リンカー内で --stack オプションが使用できないために発生します。

この障害を回避するには、別のアプローチとして、アプリケーション自体内でスタック サイズをプログラムで設定する必要があります。 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;
}
ログイン後にコピー

このメソッドを利用するには、スタック サイズ調整が実行される前にスタック オーバーフローが発生する可能性があるため、main() 関数内で大きなローカル変数を宣言しないようにする必要があることに注意してください。代わりに、スタック サイズが正常に変更されたら、main() から呼び出される関数でこれらの変数を定義します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート