在 C 中,可以在编译期间调整堆栈大小,以满足特定应用程序的特定内存要求。虽然 LD_FLAGS 选项在带有 g 的 macOS 中运行良好,但 Linux 发行版(例如 SUSE Linux)使用不同的方法。
要在 Linux 中使用 GCC 增加单个应用程序的堆栈大小,通常采用两种主要方法:
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中文网其他相关文章!