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

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

Susan Sarandon
リリース: 2024-12-24 20:03:22
オリジナル
983 人が閲覧しました

How Can I Change the Stack Size for C   Applications in Linux?

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

C では、特定のアプリケーションの特定のメモリ要件を満たすために、コンパイル中にスタック サイズを調整できます。 。 LD_FLAGS オプションは macOS では g を使用して適切に機能しますが、SUSE Linux などの Linux ディストリビューションでは別のアプローチが使用されます。

GCC を使用して Linux で単一アプリケーションのスタック サイズを増やすには、一般に 2 つの主な方法が使用されます。

ulimit -s コマンド

ulimit -s コマンドを使用して、特定のユーザーのスタック サイズ制限を設定できますまたはプロセス。ただし、このメソッドには昇格された権限が必要であり、アプリケーションを起動する前に実行する必要があります。例:

ulimit -s unlimited
ログイン後にコピー

プログラムによるスタック サイズの設定

または、setrlimit を使用してアプリケーション コード内でスタック サイズをプログラム的に設定することもできます。この方法は移植性が高く、アプリケーションが実行時にスタック サイズを動的に調整できるようになります。次のコード スニペットは、スタック サイズを 16 MB に増やす方法を示しています。

#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() で大きなローカル変数を宣言しないことが重要であることに注意してください。スタック サイズの調整が有効になります。

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

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