2389|1

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ucGUI 碎片整理疑问 - CreateHole [复制链接]

 这几天看了一天UCGUI的源码,不知道有没有朋友最这个感冒,对内存分配有几个疑问,望大虾指教。
在该函数中:
static GUI_HMEM CreateHole(int Size) {
   int i, iNext;
   int r = -1;
   for (i=0; (iNext =aBlock.Next) !=0; i= iNext) {
     int NumFreeBytes = aBlock[iNext].Off- (aBlock.Off+aBlock.Size);
     if (NumFreeBytes < Size) {
       int NumBytesBeforeBlock = aBlock[iNext].Off - (aBlock.Off+aBlock.Size);
       if (NumBytesBeforeBlock) {
         U8* pData = &GUI_Heap.abHeap[aBlock[iNext].Off];
         memmove(pData-NumBytesBeforeBlock, pData, aBlock[iNext].Size);
         aBlock[iNext].Off -=NumBytesBeforeBlock;
       }
     }
   }
/* Check last block */
   if (GUI_ALLOC_SIZE - (aBlock.Off+aBlock.Size) >= Size)
     r = i;
   return r;
}

在整理内存碎片的函数中是在整理完毕后,链表的最后添加的新的区域,疑问如下:
1:既然是为了得到Size的大小,为什么不在发现NumFreeBytes < Size 不成立的时候立即返回,添加在此区域?

2:当NumFreeBytes < Size 不成立时是不会整理该区域的,如是,是否会出现中间有大于 Size 的区域,但最后
GUI_ALLOC_SIZE - (aBlock.Off+aBlock.Size) 却小于 Size呢?

3:还一个小疑问是:int NumBytesBeforeBlock = aBlock[iNext].Off - (aBlock.Off+aBlock.Size);能否改为int NumBytesBeforeBlock = NumFreeBytes;或是不定义NumBytesBeforeBlock 而直接用NumFreeBytes?何苦定义一个新的变量?不知道是否会影响代码安全性?
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有人能给解惑吗??? 自己顶一下
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表