vector容量

自律&&自由 2018-04-21 10:34:58
我的机器上vector<int> 的max_size是1073741823,为什么我.resize(773845531)时会出错?
...全文
948 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
codedoctor 2018-04-21
  • 打赏
  • 举报
回复
vector::resize() 函数申请的空间如果大于其预留空间。否则就会申请空间为你resize的空间大一些的内存空间。比如你resize的时候预留空间为100,你申请120,那么预留空间申请可能会自动给到170,180,而且resize我记得是会自动进行默认初始化的。 所以,最好使用reserve进行容量申请。具体的自己去查一下
qq_36260408 2018-04-21
  • 打赏
  • 举报
回复
还要看你机器内存够不够
赵4老师 2018-04-21
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 容量大小从小到大:栈≤全局数据≤堆≤文件≤硬盘≤磁盘阵列≤云存储 当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。
FILE *fA;fA=fopen("A","rb+");_fseeki64(fA,10000000000i64*sizeof(int),SEEK_SET);fputc(fA,0);//int A[10000000000];
int B;
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fread(&B,1,sizeof(int),fA);//B=A[9999999999];
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fwrite(&B,1,sizeof(int),fA);//A[9999999999]=B;
fclose(fA);
在现实世界中,除时间和空间可能是无限的以外,其它任何事物都是有限的。
幻夢之葉 2018-04-21
  • 打赏
  • 举报
回复
引用 3 楼 srhouyu 的回复:
你申请的空间也不是很大,resize本身不应该出错。如果有出错,应该是其他地方有问题,请确认一下出错的具体位置。 注意VC的黄色小箭头指向的位置是即将运行的代码, 不是已经运行(出错)了的代码。别看错行了。
算了一下,如果int是四字节的话,2.88+G的内存了! max_size只是理论上的值,还有出错是什么错误?
srhouyu 2018-04-21
  • 打赏
  • 举报
回复
你申请的空间也不是很大,resize本身不应该出错。如果有出错,应该是其他地方有问题,请确认一下出错的具体位置。 注意VC的黄色小箭头指向的位置是即将运行的代码, 不是已经运行(出错)了的代码。别看错行了。

64,654

社区成员

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

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