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

C++语言 码拜 9年前 (2016-06-06) 1137次浏览
void print()
{
char a[1024];
char b[4096];
int n = 10000000;
char c[n ];  // 本人想问,n可以有多大?假设程序运行在内存为4G的windows操作系统上。
}
解决方案

40

a,b,c不在常量区,而是栈上, windows默认栈大小是1M,linux默认是8M,和版本有关.也可以本人设置.
常量区也是常量段,大小和机器字长和操作系统限制有关, 32位系统可以认为是4G
你那定义char c[n];编译不会过的吧?

5

对于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内存没有关系(准确点说应该是关系不大)

55

void print()
{
char a[1024];
char b[4096];
}
这样的内存是在栈上分配的,默认情况下最大为1MB,但可以通过链接器指令来修改,经过修改后,32位程序在windows上默认理论上不能超过2G,根据实际情况会更少

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++程序常量区一有多大
喜欢 (0)
[1034331897@qq.com]
分享 (0)