C对声明的变量大小有64k的限制吗?

时间:2014-10-13 17:07:08

标签: c++ c++builder

首先让我解释一下,我是一名电路设计师,而不是一名软件工程师,所以也许这个问题属于" Well Duhhh"类别。

当我声明一个变量,其中数组需要超过64k的内存时,我遇到了问题。 e.g。

char MyVar[100000];

编译器没有提供任何错误消息或警告,但代码有明显的内存问题。即在调试器中无法跟踪的奇怪执行。

我知道20年前存在内存限制,但我认为Windows解决了这些问题。

我意识到解决方案是使用new运算符,但我很困惑,因为我找不到任何关于此的文档。

C对声明的变量大小有64k的限制吗?我使用的是C ++ Builder XE3。

2 个答案:

答案 0 :(得分:2)

表达式std::numeric_limits<size_t>::max()是一个 绝对上限,在现代机器上,size_t通常是64 位,但即使在32位世界中,也是32位。编译器 或运行时可能会施加额外的限制;在Windows下,为 例如,堆栈大小非常有限,所以你可能会得到 如果在堆栈上分配太多,则会出现运行时错误。而且我已经 设法让内存不足&#34;来自编译器(g ++)的 桌子太过分了。 (那是机器生成的代码,而且 这些表有初始值设定项,因此编译器必须保存它们。)

尽管如此,我不希望100000引起任何问题 现代机器,即使在堆栈上。如果,我会非常惊讶 那是你的问题。仍有内存限制,但是 它们以MegaBytes为单位。

答案 1 :(得分:0)

您声明了一个静态对象,它的大小对于堆栈来说太大了。因此,您应该动态分配它以将其放在堆上:

char *MyVar = new char[100000];
...
delete[] MyVar;

或使用智能指针:

#include <memory>
std::unique_ptr<char> MyVar(new char[100000]);