使用 GNU 编译器调整 Linux 中 C 应用程序的堆栈大小
在 Linux 中,使用 GNU 编译器编译的 C 应用程序的堆栈大小可以修改以防止堆栈溢出错误。虽然 OSX 中使用的语法 (LD_FLAGS= -Wl,-stack_size,0x100000000) 可能不适用于 SUSE Linux,但有其他方法可以实现相同的结果。
一种方法是以编程方式增加堆栈大小应用程序本身。这可以使用
#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中文网其他相关文章!