怎样申请大内存?

ilovevista 2012-11-01 10:40:20
简单地说,我的PC内存可用5G,从资源监视器看到的。
我写了个程序,想malloc 800M的内存,第一次malloc成功了,第二次以及后面再多次数都失败。
于是想到了在CSDN上发帖求助一下,有没有比较好用的内存池(似乎是这么称呼这个东西哈),能满足我这个想分配大内存的需要?
...全文
303 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Emiyasstar__ 2012-11-02
  • 打赏
  • 举报
回复
内存映射
cbzjzsb123 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 4 楼 的回复:
引用 2 楼 的回复:
引用楼主 的回复:
简单地说,我的PC内存可用5G,从资源监视器看到的。
我写了个程序,想malloc 800M的内存,第一次malloc成功了,第二次以及后面再多次数都失败。
于是想到了在CSDN上发帖求助一下,有没有比较好用的内存池(似乎是这么称呼这个东西哈),能满足我这个想分配大内存的需要?


整个进程空间才4G(对32位程序……
[/Quote]
JiMoKuangXiangQu 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:
引用楼主 的回复:
简单地说,我的PC内存可用5G,从资源监视器看到的。
我写了个程序,想malloc 800M的内存,第一次malloc成功了,第二次以及后面再多次数都失败。
于是想到了在CSDN上发帖求助一下,有没有比较好用的内存池(似乎是这么称呼这个东西哈),能满足我这个想分配大内存的需要?


整个进程空间才4G(对32位程序),理论最大的malloc……
[/Quote]

#include <stdio.h>

int main(void)
{
int *ptr = (int*)malloc(200000000*sizeof(int));

if (ptr)
printf("Allocation successful!\n");
else
printf("Allocation failure!\n");

getch();
return 0;
}


上面程序在xp sp3, vs2008下运行,输出:
Allocation successful!

按照你的数字,已经分配了8192M,如果lz也用vs的话,是否修改了配置项
Project -> Properties -> Configuration Properties -> Linker -> System -> Heap Reserve Size

Project -> Properties -> Configuration Properties -> Linker -> System -> Heap Commit Size
?

供参考.
大熊猫侯佩 2012-11-02
  • 打赏
  • 举报
回复
要么装x64 OS,要么用awe特性。
herman~~ 2012-11-02
  • 打赏
  • 举报
回复
做内存池使用吗?
ysu108 2012-11-02
  • 打赏
  • 举报
回复
如果是给客户用,不是自己在搞什么实验,800M内存应该是不允许的吧。
BYD123 2012-11-02
  • 打赏
  • 举报
回复
申请这么大的内存,难道要对客户说运行此软件最小可用内存是800M? 很不现实的问题.
Eleven 2012-11-02
  • 打赏
  • 举报
回复
内存文件映射
赵4老师 2012-11-02
  • 打赏
  • 举报
回复
再大的内存也比不上一个文件大。
用文件读写模拟内存读写参考函数_lseeki64
liudanai2844 2012-11-01
  • 打赏
  • 举报
回复
楼主好玩的吧?
yisikaipu 2012-11-01
  • 打赏
  • 举报
回复
32位系统?
ilovevista 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用楼主 的回复:
简单地说,我的PC内存可用5G,从资源监视器看到的。
我写了个程序,想malloc 800M的内存,第一次malloc成功了,第二次以及后面再多次数都失败。
于是想到了在CSDN上发帖求助一下,有没有比较好用的内存池(似乎是这么称呼这个东西哈),能满足我这个想分配大内存的需要?


整个进程空间才4G(对32位程序),理论最大的malloc()数值上限.当然还要除掉……
[/Quote]
我的程序也不大,最多最多也就10M,进程空间4G,除掉边边角角,我觉得还是够两次分配800M的空间吧?
ilovevista 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
申请那么多内存做什么,代码贴上了看一下
[/Quote]

就是
int *ptr=(int*)malloc(200000000*sizeof(int));

几个0我记不清了,当时算下来可能需要800M
第一次ptr是非NULL,第二次就是NULL了。
JiMoKuangXiangQu 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
简单地说,我的PC内存可用5G,从资源监视器看到的。
我写了个程序,想malloc 800M的内存,第一次malloc成功了,第二次以及后面再多次数都失败。
于是想到了在CSDN上发帖求助一下,有没有比较好用的内存池(似乎是这么称呼这个东西哈),能满足我这个想分配大内存的需要?
[/Quote]

整个进程空间才4G(对32位程序),理论最大的malloc()数值上限.当然还要除掉代码数据.
malloc()申请的进程空间的地址空间,而不是你真正的物理内存的空间,不要混淆这个概念.

用VirtualAlloc()吧.
liudanai2844 2012-11-01
  • 打赏
  • 举报
回复
申请那么多内存做什么,代码贴上了看一下

64,648

社区成员

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

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