C では、特定のアプリケーションの特定のメモリ要件を満たすために、コンパイル中にスタック サイズを調整できます。 。 LD_FLAGS オプションは macOS では g を使用して適切に機能しますが、SUSE Linux などの Linux ディストリビューションでは別のアプローチが使用されます。
GCC を使用して Linux で単一アプリケーションのスタック サイズを増やすには、一般に 2 つの主な方法が使用されます。
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 サイトの他の関連記事を参照してください。