Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298705
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 564
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-20 18:15
个人简介

用编程改变大众。。。

文章分类

全部博文(71)

文章存档

2016年(7)

2015年(54)

2014年(10)

我的朋友

分类: C/C++

2015-07-04 21:47:55

Q: 请问char数组最大能多少?是否无法超过1024?


我指定char   test[300*1024]的时候没有任何问题,而char   test[1024*1024]就会出错,是否char[]无法超过1024*1024?  

  因为我需要在程序运行中,读取一个文件到内存,而文件大小不固定,大多数时候超不过300k,但是考虑到万一超过300k的情况,所以希望设置大一点。

A1:

需要更大的内存空间,可以使用动态内存分配,最大不超过2G(看你的机子内存而定)  ,可以用new   或   malloc  

A2:

只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出  
  在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因 此,能从栈获得的空间较小。 so.综上。Bomb....栈暴了。。。

A3:

在VC中栈的缺省值为1M,所以当你分配1024*1024个char后,栈就溢出了。读取文件时,一般来说不会全部读入,只读要用的部份,如果必须全部读入,大多数使用堆上内存。如果确有需要,在VC中是可以调整栈内存的大小,选项是/statck.  

A4:

实用共享内存文件影射方式,UNIX上可以处理几十个G的数据,在PC机上没试过  
  另外,建议修改程序结构,不要因为程序的原因影响应用功能。

A5:

学习!如果是需要   超过实际内存空间的大小,那还是申请硬盘空间好了.  
  最好自己做个虚拟内存,页交换,表交换什么的...这样子过不了多少时间,可以搞个os来了...  
  发达了...


阅读(1474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~