-1

我知道编译器为创建数组提供的内存量是有限制的。如何配置我的编译器以增加此内存。如果可能,有什么优点和缺点?我使用 linux 和 g++ 编译器。

4

2 回答 2

1

我将尝试回答您,即使问题非常不具体(请指定您的编译器,如果您的意思是堆栈)。

现在我假设您的意思是堆栈,并且您正在使用带有 Visual Studio 的 Linux 或 Windows。

Linux

在 linux 上,您可以使用系统调用setrlimit。然后,您将在代码中以编程方式设置堆栈,就像在这个Stack Overflow 线程中一样。

视窗

在带有 Visual Studio 的 Windows 上,您可以使用编译器选项,/F或者/STACK,有关更多信息,请访问此 MSDN 文档页面


在某些情况下,您也可以考虑使用堆而不是堆栈,这个线程中有一些很好的比较。然后您将使用动态内存分配并且您不会关心堆栈大小(但是,您会关心数组的一些不同方法)。

如果您还有其他问题,请指定您的编译器...

于 2012-04-08T17:24:24.433 回答
1

如果您在谈论堆栈大小,则取决于您使用的系统。由于您说要在 linux 上,因此您可以从程序中更改堆栈大小。但是请注意,这不能移植到其他操作系统。要更改堆栈大小,您可以使用此函数(或多或少从此处复制)

#include <sys/resource.h>

using namespace std;

//Increases the Stacksize to at least minStackSize
bool setStack(rlim_t minStackSize)
{
    struct rlimit rl;
    int result; 

    result = getrlimit(RLIMIT_STACK, &rl);

    //If we got an answer
    if (result == 0)
    {
        //Check if Stack is smaller than needed
        if (rl.rlim_cur < minStackSize)
        {
            //Increase Stacksize
            rl.rlim_cur = minStackSize;
            result = setrlimit(RLIMIT_STACK, &rl);

            if (result == 0)
                return true;
            else
                return false;
        }
        else
            return true;
    }
    else
        return false; 
} 

请注意,它是一个极简函数,您可能想要添加自己的错误消息,而不是仅仅返回 TRUE/FALSE。

增加堆栈大小的好处是,如果您尝试在堆栈上放置比堆栈大小允许的更多变量,您的程序不会崩溃。缺点是这个空间总是被你的程序占用,不管它是否被实际使用。(但是你的操作系统可能会有点欺骗)

于 2012-04-08T17:29:45.923 回答