数组最大长度问题

问题的引出

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

理解

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]。其他类型数据类似

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部