C++程序常量区一有多大?

knifekaka 2016-08-20 10:47:10
void print()
{
char a[1024];
char b[4096];

int n = 10000000;
char c[n ]; // 我想问,n可以有多大?假设程序运行在内存为4G的windows操作系统上。
}
...全文
242 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 版主 2016-08-21
  • 打赏
  • 举报
回复
void print()
{
char a[1024];
char b[4096];
}

这样的内存是在栈上分配的,默认情况下最大为1MB,但可以通过链接器指令来修改,经过修改后,32位程序在windows上默认理论上不能超过2G,根据实际情况会更少
wcs7846 2016-08-20
  • 打赏
  • 举报
回复
对于int类型数据可以有多大这个问题我的看法: 1.该类型可以存放的大小与编译器给予该类型分配的内存大小有关,即以32位系统为例:如果编译器分配了4个字节的内存空间,那么这个数可以存的最大数为=2^31-1,其中31的计算方式为:4*8-1=31(因为1btye=8bit) 2.对于如何知道编译器分配的内存是4个字节这个问题,可以采用sizeof(int)的方式来获得。 3.然后对于你的代码存在的一个问题,即char c[n]中n要求是常量即应该是声明成 const int n=100000;而不是int n=100000; 4.而且int的大小与系统的4G内存没有关系(准确点说应该是关系不大)
kongl123 2016-08-20
  • 打赏
  • 举报
回复
a,b,c不在常量区,而是栈上, windows默认栈大小是1M,linux默认是8M,和版本有关.也可以自己设置. 常量区也是常量段,大小和机器字长和操作系统限制有关, 32位系统可以认为是4G 你那定义char c[n];编译不会过的吧?

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧