程序运行时提示内存不足怎么办?

尘埃黎明 2011-02-22 04:31:35
可能是程序中用new申请的内存太多了,运行时提示内存不足,不知道有没有什么办法
...全文
897 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2011-02-25
  • 打赏
  • 举报
回复
如果2G内存都不够你用,那么说明你的程序在 设计 上就存在严重的问题,
还是重新想想程序的设计吧,

这时候就只能用时间换空间了.
岁月小龙 2011-02-25
  • 打赏
  • 举报
回复
学习了,内存泄露是永不过时的话题。
Hyena_lei 2011-02-25
  • 打赏
  • 举报
回复
跟踪一下看是否程序员有问题
尘埃黎明 2011-02-25
  • 打赏
  • 举报
回复
不知能否用内存映射文件来解决?
bai_hua_lin 2011-02-25
  • 打赏
  • 举报
回复
肯定是设计上的缺陷,没有听说什么软件的开发要占用这么多的内存的。
无水先生 2011-02-25
  • 打赏
  • 举报
回复
用以下方法:
BYTE *pByte;
try ()
{
pByte = new BYTE[10000];
if (pByte ==NULL) throw 20;
}
catch(int)
{
AfxMessageBox("OVER FLOW");
return FALSE;
}
majia2011 2011-02-24
  • 打赏
  • 举报
回复
内存里的东西也是硬盘上读出来了,少读点就行了,做个最大计数,如果100帧够顺利播放,就读100个

等1不用了,释放掉,在把101读进来。也可以10个一组的读,10个一组的放,程序要的是思想

怎么效率高怎么来
尘埃黎明 2011-02-24
  • 打赏
  • 举报
回复
“或者,你可不可以换个思路,比如,你的数据一共要存储 2.5G 。那你先把前面的 500MB 存储到硬盘里,内存不够,你的硬盘总够吧???就是,把你的数据,分多个文件存储到硬盘里,然后,后面需要时再单个打开并读取到内存里处理。”
这种办法有没有例程可以参考一下?谢谢!
TandyT 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 beyondsky007 的回复:]
用来播放、编辑的
[/Quote]

我的意思是,你是要直接在内存中播放,还是可以先保存到硬盘里,然后再播放的啊?如果一定要全都放在内存中的话,我无能为力了,还没学过如果用软件的方法弥补硬件的不足,即使通过虚拟内存,也难实现。。。。。。
尘埃黎明 2011-02-22
  • 打赏
  • 举报
回复
用来播放、编辑的
TandyT 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 beyondsky007 的回复:]
是一些图像,一帧几百k,生成几千帧的话就很大了
[/Quote]


这些图像你用来干嘛的?
都要保存下来么?

那除非你保存为图片文件到硬盘,如果一定要全都保存到内存,那你的物理内存都不够,你这个程序当然会提示内存不够啦!那没其他办法,只能扩大物理内存了。
fengbingchun 2011-02-22
  • 打赏
  • 举报
回复
有可能申请new后,用完没有即时delete掉,在debug下调试可找出
尘埃黎明 2011-02-22
  • 打赏
  • 举报
回复
是一些图像,一帧几百k,生成几千帧的话就很大了
TandyT 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 beyondsky007 的回复:]
需要保存,700多k大概需要循环几千次,一次性申请也申请不了
[/Quote]

你这个是每次循环的结果,都要保存下来的么?如果不是,那就只申请 700多K 就可以了啊,如果是每次结果都要保存,那一次不够申请 ,即使你循环里申请就够么?一样不够吧,比如,你的程序,需要2.5G 的内存空间来存储你的结果,但是你的物理内存只有2G ,那比尔盖茨也帮不了你、、、、、、、、、

你到底要保存的是什么数据啊?你确定不是你算法的问题?而是实际上一定要这么多的内存空间来存储?

因为你总的内存才不到2G ,这个是没办法的!!

或者,你可不可以换个思路,比如,你的数据一共要存储 2.5G 。那你先把前面的 500MB 存储到硬盘里,内存不够,你的硬盘总够吧???就是,把你的数据,分多个文件存储到硬盘里,然后,后面需要时再单个打开并读取到内存里处理。
heng691 2011-02-22
  • 打赏
  • 举报
回复
内存及时回收,防止泄露
尘埃黎明 2011-02-22
  • 打赏
  • 举报
回复
需要保存,700多k大概需要循环几千次,一次性申请也申请不了
TandyT 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 beyondsky007 的回复:]
引用 8 楼 tandyt 的回复:

引用 5 楼 beyondsky007 的回复:
这些内存都还不应该delete


难道每次需要的内存空间,大小都是不固定的么?如果是大小确定的,可以申请个全局的内存空间啊,尽量避免在 for循环或者 while 循环里 new 申请空间


什么意思?是大小固定的,每次大概700多k,申请几千次就超过2G了
[/Quote]

加入你的大小为 1M,那先在所有需要用这个内存的代码之前,new 申请一个内存空间。然后,在需要用的地方用,更新你的数据,在这个空间不需要的时候,再 delete 就可以了

没必要在循环里用 new 来申请。

当然,这个是有前提的,前提是,你不需要把每次的数据保存下来,比如,第一次,你存储了1M 的数据到这个数组,第二次用的时候,肯定会覆盖上次的。就是,每次操作之后,都只保留最后一次的操作结果的值。

如果你需要把每次的结果都保存起来,那你就要先估计你大概要循环 n 次,然后一次性申请 n*1M 的数组。然后每次循环时把结果依次存储到这个数组里。

用完后再释放这个数组即可。

反正避免申请内存的操作在循环内进行!
onlyliu 2011-02-22
  • 打赏
  • 举报
回复
数据用了以后就删除。。。。。你不删除,1T都不给力。
尘埃黎明 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tandyt 的回复:]

引用 5 楼 beyondsky007 的回复:
这些内存都还不应该delete


难道每次需要的内存空间,大小都是不固定的么?如果是大小确定的,可以申请个全局的内存空间啊,尽量避免在 for循环或者 while 循环里 new 申请空间
[/Quote]

什么意思?是大小固定的,每次大概700多k,申请几千次就超过2G了
TandyT 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 beyondsky007 的回复:]
电脑内存已经接近2G了。。。。。
[/Quote]

你的内存即使 20G ,也是神马。。。。如果在循环里new 动态申请且不及时释放,很快,你的内存就剩软盘容量大小了。。。。
加载更多回复(8)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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