静态存储区 最大限制为多大?

风来我也来 2012-10-06 12:03:27
堆 最大是4G。
栈 默认是1M可以通过设置增加。
问题一:那么 静态存储区最大为多大?
问题二:编译时,设置生成的代码是32位机器和64位机器,是否有不一样 限制?
...全文
2945 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2012-10-06
  • 打赏
  • 举报
回复
就没有静态存储区和堆的区别存在。
JiMoKuangXiangQu 2012-10-06
  • 打赏
  • 举报
回复
刚才哪个测试代码有点问题,整数溢出了,改一下.
char s_zone[0xFFFFFFFE];

int main(void)
{
return 0;
}
JiMoKuangXiangQu 2012-10-06
  • 打赏
  • 举报
回复
刚才哪个测试代码有点问题:
char s_zone[(unsigned __int64)0xFFFFFFFE];

int main(void)
{
s_zone[0] = 0;
return 0;
}
JiMoKuangXiangQu 2012-10-06
  • 打赏
  • 举报
回复 1
堆最大也没有4G,因为整个进程的映像空间有一部分被映射给操作系统,另外栈也占据了一部分,全局,静态变量再占据一部分,还有其他代码数据占据一部分.

问题一:
静态存储区理论上有4G,但除掉刚才说的那些,一个静态存储区也不可能占据整个存储空间.
简单例子,可以测试一下:
char s_zone[0xFFFFFFFF + 1];

int main(void)
{
return 0;
}

编译试试看,呵呵.

问题二:
32bit程序和64程序是有差别的,至少PE32和PE64规格存在差异,另外还有其他点,譬如,32-bit程序在64-bit
系统下运行的时候是运行在一个叫做WOW(Windows On Windows)的子系统下.

以上意见,仅供参考.
taodm 2012-10-06
  • 打赏
  • 举报
回复
静态数据区没有限制的。
另外找出错原因去
风来我也来 2012-10-06
  • 打赏
  • 举报
回复
32位XP系统,VS2008 c++环境下,控制台程序。
代码如下

int i=444;
char a[0xffffffff];
int j =68;
int main(void)
{
cout<<i<<" "<<a[0xFFFFFFFE]<<" "<<j<<endl;
system("pause");
}

1>f:\c或c++语言类及变量测试\控制台快速测试程序\test\test\test.cpp(11) : error C2148: 数组的总大小不得超过 0x7fffffff 字节
1>f:\c或c++语言类及变量测试\控制台快速测试程序\test\test\test.cpp(11) : error C2148: 数组的总大小不得超过 0x7fffffff 字节

更改代码如下:

int i=444;
char a[0x7ffffff0];
int j =68;
int main(void)
{
cout<<i<<" "<<a[0x7ffffff0]<<" "<<j<<endl;
system("pause");
}

fatal error LNK1248: 映像大小(82914000)超过允许的最大大小(80000000)

再减少一个数量级别就能通过编译和链接,有结果。这个结果显示 可以定义很大的空间。
我今天问这问题是自己要定义一些静态变量,这些变量是一些指针类型。突然想起几个月前帮人调程序的时候,VC6.0环境下,那个人 定义了类似我代码中的那种方式。那个数组没那么大,大概也就十几兆大小。
问题描述: j的值 在单步调试的时候是正确的,如果让它正常运行,则j的值被修改为莫名其妙的值,即使加了 volatile关键字也无效。不明白哪里出错。解决方法是把 j 放在 那个大数组前面定义,然后j的值正常了(确认代码中午数组越界错误)。这个结果似乎是 全局数据区有限定大小。
我想问下,这个什么因素会影响静态数据区限额?

64,654

社区成员

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

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