我知道编译器为创建数组提供的内存量是有限制的。如何配置我的编译器以增加此内存。如果可能,有什么优点和缺点?我使用 linux 和 g++ 编译器。
2 回答
我将尝试回答您,即使问题非常不具体(请指定您的编译器,如果您的意思是堆栈)。
现在我假设您的意思是堆栈,并且您正在使用带有 Visual Studio 的 Linux 或 Windows。
Linux
在 linux 上,您可以使用系统调用setrlimit。然后,您将在代码中以编程方式设置堆栈,就像在这个Stack Overflow 线程中一样。
视窗
在带有 Visual Studio 的 Windows 上,您可以使用编译器选项,/F
或者/STACK
,有关更多信息,请访问此 MSDN 文档页面。
在某些情况下,您也可以考虑使用堆而不是堆栈,这个线程中有一些很好的比较。然后您将使用动态内存分配并且您不会关心堆栈大小(但是,您会关心数组的一些不同方法)。
如果您还有其他问题,请指定您的编译器...
如果您在谈论堆栈大小,则取决于您使用的系统。由于您说要在 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。
增加堆栈大小的好处是,如果您尝试在堆栈上放置比堆栈大小允许的更多变量,您的程序不会崩溃。缺点是这个空间总是被你的程序占用,不管它是否被实际使用。(但是你的操作系统可能会有点欺骗)