BREW优化代码以避免堆存储碎片.doc

上传人:M****1 文档编号:557527591 上传时间:2023-12-15 格式:DOC 页数:3 大小:30.50KB
返回 下载 相关 举报
BREW优化代码以避免堆存储碎片.doc_第1页
第1页 / 共3页
BREW优化代码以避免堆存储碎片.doc_第2页
第2页 / 共3页
BREW优化代码以避免堆存储碎片.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《BREW优化代码以避免堆存储碎片.doc》由会员分享,可在线阅读,更多相关《BREW优化代码以避免堆存储碎片.doc(3页珍藏版)》请在金锄头文库上搜索。

1、优化代码以避免堆存储碎片 #define MSG_SIZE (100 * sizeof(AECHAR)static void CMyApp_FragmentTheHeap(CMyApp * pme, AECHAR * p1,AECHAR * p2)byte *pDest,*pTemp;AECHAR szFormat10;STR_TO_WSTR(%s%s,szFormat,sizeof(szFormat);pTemp = (AECHAR *)MALLOC(MSG_SIZE);if(!pTemp)return;WSPRINTF(pTemp,MSG_SIZE,szFormat,p1,p2);i =

2、(WSTRLEN(pTemp) + 1) * sizeof(AECHAR);pDest = WSTRDUP(pTemp);FREE(pTemp);. 此代码有什么问题? 尽管此代码实际上在初次分配时检查 NULL,但它会导致堆中出现存储碎片(即“孔”)。 这可能使以后的分配无故失败。 pTemp 的内存仅在分配新值 pDest 后释放。 更佳的解决方案如下所示: #define MSG_SIZE (100 * sizeof(AECHAR)static void CMyApp_FragmentTheHeap(CMyApp * pme, AECHAR * p1, AECHAR * p2)byte

3、* pDest;int nLen;if(!p1 | !p2)return;pDest = (AECHAR *)MALLOC(WSTRLEN(p1) + WSTRLEN(p2) + 1) * sizeof(AECHAR);if(!pDest)return;WSTRCPY(pDest, p1);WSTRCAT(pDest, p2);. 所有这些错误都非常严重。 简言之,它们将一个可用于显示消息框的简单函数转换成一个引起异常的函数!检查 NULL 和不必要的分配 Static void CMyApp_HowManyMistakesCanIMakeInOneFunction(CmyApp *pme,c

4、onst AECHAR * pszError)AECHAR * pMsg;int i;i = (WSTRLEN(pszError) + 1) * sizeof(AECHAR);pMsg = (AECHAR *)MALLOC(i);WSTRCPY(pMsg,pszError);ISHELL_MessageBox(pme-a.m_pIShell, pMsg,.);FREE(pMsg);此代码有什么问题? 此函数中有几个非常严重的错误。 它包括: 无法检查确保 pszError 在使用前为 NULL 无法检查 MALLOC 的 NULL 返回值 不需要时分配 pMsg。 “pszError”值可以直

5、接传递给 ISHELL_MessageBox 所有这些错误都非常严重。 简言之,它们将一个可用于显示消息框的简单函数转换成一个失效的函数。 BREW 应用程序必须检查内存分配例程的返回值 NULL、返回类实例的值等。不合理地分配大块 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 m_nBuffSize = 0x4000;elsepme-m_nBuffSize = nNewSize + 0X4000;while(pme-m_pBuff = REALLOC(pme-m_pBuff, pme-m_nBuffSize) = NULL)pme-m_nBuffSize -= 0x100;if(pme-m_nBuffSize m_nBuffSize + nSize;pme-m_pBuff = (byte *)REALLOC(pme-m_pBuff, nNewSize);if(!pme-m_pBuff)return;.pme-m_nBuffSize = nNewSize;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号