GNU コンパイラーを使用した Linux での C アプリケーションのスタック サイズの調整
Linux では、GNU コンパイラーでコンパイルされた C アプリケーションのスタック サイズスタック オーバーフロー エラーを防ぐために変更できます。 OSX で使用される構文 (LD_FLAGS= -Wl,-stack_size,0x100000000) は SUSE Linux では機能しない可能性がありますが、同じ結果を達成する別の方法があります。
1 つのアプローチは、プログラムでスタック サイズを増やすことです。アプリケーション自体。これは、
#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 サイトの他の関連記事を参照してください。