操作系统  办公  实用知识  设计  开发  WEB开发  移动开发  数据库  软件工程  网管  安全  管理  信息化  答疑  渠道 

不合理地分配大块

2006-10-9 网友评论 0 条 点击进入论坛

static void CMyApp_AllocateTooMuch(CMyApp * pme,
const byte * pIn, int nSize)
{
int nNewSize;

nNewSize = pme->m_nBuffFilled + nSize;
if(pme->m_nBuffSize < nNewSize){
if(nNewSize < 0x4000)
pme->m_nBuffSize = 0x4000;
else
pme->m_nBuffSize = nNewSize + 0X4000;
while((pme->m_pBuff = REALLOC(pme->m_pBuff,
pme->m_nBuffSize)) == NULL)
pme->m_nBuffSize -= 0x100;
if(pme->m_nBuffSize < nNewSize)
return;
}
}
...

}

此代码有什么问题?

此代码不确定必需多少字节,而是增加额外分配的字节,以期避免未来的分配。 虽然这在“额外”分配的大小合理时是可以接受的,但本例中的额外开销远远超出了 BREW™ 中的合理分配大小。 更佳的解决方案如下所示:
static void CMyApp_AllocateTooMuch(CMyApp * pme, const byte * pIn,
int nSize)
{
int nNewSize;

nNewSize = pme->m_nBuffSize + nSize;
pme->m_pBuff = (byte *)REALLOC(pme->m_pBuff, nNewSize);
if(!pme->m_pBuff)
return;

...

pme->m_nBuffSize = nNewSize;
}

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 登录邮箱: 密码:
  匿名发表
今日推荐
技术文库(共有 46473 篇文章)
操作系统
办公软件
实用知识
网络管理
软件开发
WEB开发
软件工程
数据库
设计在线
信息安全
行业信息化
管理信息化
重点推荐
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail