c++碰到的几个问题

来源:互联网 发布:历史发明家袁腾飞 知乎 编辑:程序博客网 时间:2024/04/29 06:19

这些问题都是没有考虑到cpu和内存极限所引起来的。


1、内存不够时,new会引起异常(至少我电脑上vs2008是直接崩溃,而不是返回null)。要返回NULL,如下使用:

FRAME_AUDIO* frame  = new(std:nothrow)FRAME_AUDIO; 或者

FRAME_AUDIO* frame  = new(std:no throw)FRAME_AUDIO();

后者会在new的同时用0初始化结构体。


2、sdk的vector没有考虑上限,所以当电脑性能不够时,sdk里面的音视频帧会一直堆积起来,同时会产生bad_alloc之类的警告。撑爆内存。这是很深刻的教训。


写了个demo,看看new异常的表现,记录如下:

if(内存不足 -- 内存申请到了1.7G以上)
{
if(使用没有std::nothrow的new)
{
if(主线程)
{
弹出内存不足对话框(不管debug还是release);
}
else if(子线程)
{
抛出异常
}
}

if(使用有std::nothrow的new 或者 malloc)
{
直接返回null指针
}
}


至于大型软件中,使用没有std::throw的new,内存用到500M以上,就抛出异常的情况,没有重现出来。希望有经验的大牛指点一下。

0 0
原创粉丝点击