首先让我解释一下,我是一名电路设计师,而不是一名软件工程师,所以也许这个问题属于" Well Duhhh"类别。
当我声明一个变量,其中数组需要超过64k的内存时,我遇到了问题。 e.g。
char MyVar[100000];
编译器没有提供任何错误消息或警告,但代码有明显的内存问题。即在调试器中无法跟踪的奇怪执行。
我知道20年前存在内存限制,但我认为Windows解决了这些问题。
我意识到解决方案是使用new运算符,但我很困惑,因为我找不到任何关于此的文档。
C对声明的变量大小有64k的限制吗?我使用的是C ++ Builder XE3。
答案 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]);