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 サイトの他の関連記事を参照してください。