首页 > 解决方案 > Windows 上的端口 getrlimits/setrlimit

问题描述

我正在寻找一种在 Windows 上移植 POSIX getrlimits/setrlimit 功能的方法。

我们的应用程序有时会遇到非常深的递归,并达到默认堆栈限制,从而导致堆栈溢出。

为了防止这种情况发生,我们编写了以下代码:

struct rlimit rl;
int error = getrlimit(RLIMIT_STACK, &rl);
if (!error) 
{
  rl.rlim_cur = rl.rlim_max;
  error = setrlimit(RLIMIT_STACK, &rl);
}

基本上我们在这里将堆栈限制设置为最大值。

现在我正在尝试使用 minGW 将此代码移植到 Windows(在 Linux 上为 Windows 交叉编译)

我四处搜索,但找不到从代码中执行此操作的方法。

我发现的是一个链接器标志“--stack”,它可以用作:

mingw32-g++ -Wl,--stack, -o file.exe file.c

但我不确定我是否会在长期使用这种用法时遇到一些问题(比如为整个应用程序设置堆栈限制与为特定代码段设置堆栈限制)

我更喜欢这个解决方案是以下之一:

  1. 一种独立于平台的方式来设置堆栈限制或
  2. 一种从代码中在 Window 中设置堆栈限制的方法。

标签: c++windowsmingwporting

解决方案


推荐阅读