数组最大长度问题

问题的引出

编程题目中经常会碰到数组的开太大溢出的问题,为了彻底搞清楚数组长度的问题,把数组长度问题总结了一下

理解

1首先要知道c++的内存的分配

全局变量放在静态数据区中
局部变量放在栈区

2不同系统下分配不一样

以下以int(整型)为例
一、Windows下,静态数据区的所允许的空间大小取决于剩余内存的大小,8g说明有8 * 1024 * 1024 * 1024 =2^33的空间,可以开整型(int) 2^33 /4=2^31, 即a[2 * 10^9],

二、但是不同的编译器不一样,一般32位的编译器(如我用的是devcpp),静态数据区只分配大约2g的内存即2 * 1024 * 1024 * 1024=2 ^31 而2 ^31 /4=2 ^29 ≈5.3 * 10^8, 就是只能开10^8到 10^9次方的数组,实测devcpp只能开到int a[498808383]; 不到5 * 10^8

三、但是上面的只是针对全局数据放的静态数据区域,局部变量放在栈区,分配的空间大概只有2m,也就是2 * 1024 * 1024B,如果是int型的数据大概数组的长度为524288 即10^5~ 10^6,在devcpp中 实测最大开到int a[518020] 。

四、如果是竞赛,题目给出256mb,那么意思就是局部变量的大小256mb就是能开大小大约6.7*10^7的长度的数组

总结

对于int型的数组,在编译器,一般全局数组变量能开a[10^8~ 10^ 9],局部数组变量数组能开a[10^5 ~ 10^6]。其他类型数据类似

最后,写这个文章也是为了做个笔记使用,加深自己的理解
如有错误,欢迎到评论区指正

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值