如何分配更大内存

sinat_33314857 2016-10-07 09:22:39
c++编写,32位操作。在给数组分配大小时,总会出现这种错误提示“数组总大小补的超过0x7fffffff”。现在的问题是,我的电脑内存有500多G,我需要处理一个30G的数据文件,现在想开辟一块内存一次性将文件中的数据全部存放进去,后续用时一点点取,而不用再读文件,那应该如何使用这么大的内存?如何定义存放数据的数组?不考虑用内存映射文件,不改64位系统,还有没有其他方法?
我现在是在牺牲内存换取后续处理过程更少的处理时间,恳请朋友老师们指导
...全文
788 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-09
  • 打赏
  • 举报
回复
9楼正解!
ooolinux 2016-10-08
  • 打赏
  • 举报
回复
32位的系统(包括编译器)最多只能操作2的32次方大小的内存,等于4G,32位系统的指针就是32位的。
dustpg 2016-10-08
  • 打赏
  • 举报
回复
啥民用CPU支持到500G内存了, 不一般支持到64G么...lz莫非巨壕
赵4老师 2016-10-08
  • 打赏
  • 举报
回复
容量大小从小到大:栈≤全局数据≤堆≤文件≤硬盘≤磁盘阵列≤云存储 当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。
baili35 2016-10-08
  • 打赏
  • 举报
回复
跨进程共享内存:多进程分别读取文件,处理进程一次讲内存映射到自己的地址空间然后.
paschen 2016-10-07
  • 打赏
  • 举报
回复
引用 4 楼 sinat_33314857 的回复:
[quote=引用 1 楼 paschen 的回复:] 这么大的数据肯定不能用栈上的数组,你可以动态申请内存,或者使用vector等容器,不过32位程序最多4G内存,你能申请到的通常也就2G
这个申请内存,我有些不理解,我的电脑既然有那么大内存,还是不能事先开辟好一块内存用于存放数据吗?只能用分配在栈上的或者堆上?(对这方面了解不多)[/quote] 建议楼主先把基础打好。。
fefe82 2016-10-07
  • 打赏
  • 举报
回复
引用 3 楼 sinat_33314857 的回复:
[quote=引用 2 楼 fefe82 的回复:] 500G 内存 ... 32 位 系统 ... 好浪费啊 ... ================================== 啥操作系统?啥编译器? ==================================
引用
不考虑用内存映射文件
为啥?
不会用,想先从简单的方式尝试。 应该是没表达清楚,电脑是500G内存,但vc2010使用的是32位的,程序很多部分想函数库,界面操作等都是用的32位,冒然改到x64,会出现很多错误,所以也没修改[/quote] 这个 .... 其实挺简单的 ... https://msdn.microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx 不过 32 位编译器,30G 的内存没法一次读进来,内存映射也没法一次都映射进来,虚存一共就 4G ....
sinat_33314857 2016-10-07
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
这么大的数据肯定不能用栈上的数组,你可以动态申请内存,或者使用vector等容器,不过32位程序最多4G内存,你能申请到的通常也就2G
这个申请内存,我有些不理解,我的电脑既然有那么大内存,还是不能事先开辟好一块内存用于存放数据吗?只能用分配在栈上的或者堆上?(对这方面了解不多
sinat_33314857 2016-10-07
  • 打赏
  • 举报
回复
引用 2 楼 fefe82 的回复:
500G 内存 ... 32 位 系统 ... 好浪费啊 ... ================================== 啥操作系统?啥编译器? ==================================
引用
不考虑用内存映射文件
为啥?
不会用,想先从简单的方式尝试。 应该是没表达清楚,电脑是500G内存,但vc2010使用的是32位的,程序很多部分想函数库,界面操作等都是用的32位,冒然改到x64,会出现很多错误,所以也没修改
fefe82 2016-10-07
  • 打赏
  • 举报
回复
500G 内存 ... 32 位 系统 ... 好浪费啊 ... ================================== 啥操作系统?啥编译器? ==================================
引用
不考虑用内存映射文件
为啥?
paschen 2016-10-07
  • 打赏
  • 举报
回复
这么大的数据肯定不能用栈上的数组,你可以动态申请内存,或者使用vector等容器,不过32位程序最多4G内存,你能申请到的通常也就2G

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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