首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C对声明的变量大小有64k的限制吗?

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

Stack Overflow用户
提问于 2014-10-14 01:07:08
回答 2查看 683关注 0票数 0

首先让我解释一下,我是一名电路设计师,而不是一名软件工程师,所以这个问题可能属于“好吧!”

当我声明一个数组需要超过64k内存的变量时,我会遇到问题。例如:

代码语言:javascript
运行
复制
char MyVar[100000];

编译器不会给出任何错误消息或警告,但是代码有明显的内存问题。也就是说,在调试器中无法跟踪的奇怪执行。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2014-10-14 01:20:49

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

尽管如此,我不认为100000会在任何现代机器上造成任何问题,即使是在堆栈上。如果这就是你的问题我会很惊讶的。仍然存在内存限制,但它们是以MegaBytes度量的。

票数 2
EN

Stack Overflow用户

发布于 2014-10-22 21:19:27

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

代码语言:javascript
运行
复制
char *MyVar = new char[100000];
...
delete[] MyVar;

或者使用智能指针:

代码语言:javascript
运行
复制
#include <memory>
std::unique_ptr<char> MyVar(new char[100000]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26345230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档