首先让我解释一下,我是一名电路设计师,而不是一名软件工程师,所以这个问题可能属于“好吧!”
当我声明一个数组需要超过64k内存的变量时,我会遇到问题。例如:
char MyVar[100000];编译器不会给出任何错误消息或警告,但是代码有明显的内存问题。也就是说,在调试器中无法跟踪的奇怪执行。
20年前我就知道存在内存限制,但我认为Windows解决了这些问题。
我意识到解决方案是使用new运算符,但我感到困惑的是,我找不到任何关于这方面的文档。
C对声明的变量大小有64k的限制吗?我使用C++生成器XE3。
发布于 2014-10-14 01:20:49
表达式std::numeric_limits<size_t>::max()是一个绝对的上限,在现代机器上,size_t通常是64位,但即使在32位的世界中,它也是32位。编译器或运行时可能会施加额外的限制;例如,在Windows下,堆栈的大小非常有限,因此如果在堆栈上分配了太多内存,则可能会出现运行时错误。而且我已经设法从编译器(g++)那里得到了“内存不足”,因为表太小了。(这是机器生成的代码,并且表有初始化器,所以编译器必须保存它们。)
尽管如此,我不认为100000会在任何现代机器上造成任何问题,即使是在堆栈上。如果这就是你的问题我会很惊讶的。仍然存在内存限制,但它们是以MegaBytes度量的。
发布于 2014-10-22 21:19:27
你声明了一个静态对象,但它的大小对于堆栈来说太大了。因此,您应该动态分配它以将其放到堆上:
char *MyVar = new char[100000];
...
delete[] MyVar;或者使用智能指针:
#include <memory>
std::unique_ptr<char> MyVar(new char[100000]);https://stackoverflow.com/questions/26345230
复制相似问题