TI论坛
直播中

姬房有

9年用户 335经验值
私信 关注
[问答]

C6638内存释放耗时前面地址释放需要几千cycle,后面地址释放需要几十万cycle是什么原因

在一个核中,程序开始会malloc一些空间(在DDR中,申请的空间都是28字节),申请的地址也是逐步向后排的,等到释放的时候发现越到后面的地址释放起来越耗时
前面的地址释放需要几千cycle,后面的地址释放需要几十万cycle,请问这是怎么回事?是寻址的时间长导致的吗?该怎么解决呢,是不是我用错了内存分配函数?还是这种现象无法避免了?

回帖(5)

王英

2019-1-7 11:32:17
肯定不是寻址时间的问题;但不清楚你的代码实现流程,也无法做出判断。
举报

姬房有

2019-1-7 11:38:15
我把代码简化了一下,做了一个实验,代码的结构是这样的:多个线程,我在优先级第二大的TSK的开头写了两个for循环
/****连续申请****/
for(i=0;i<400;i++)
[
 pTest = malloc(28);  //申请28字节的空间
uiTestArr = pTest ;
pTest  = NULL;
]
/****连续释放****/
for(i=0;i<400;i++)
[
free(uiTestArr,28);
]
我统计出的耗时情况如下:
(1)malloc的耗时:
下图的第二列是malloc语句消耗的时间,第三列是申请到的地址
我预期的情况是,申请同样大小的空间,耗时应该是相同的,或者不会相差很多,但从图中可见,有出现几千的情况,这个是什么原因?

(2)free的耗时:
情况和malloc的差不多,也是会突然冒出几个大的值
如果是因为优先级抢占造成的,确实会有一个TSK会和它抢,而且频率是1ms一次,但不管是malloc还是free的执行应该都是会保护自己不被打断的才对,不知道真实情况是不是想我猜测的这样。而且我也在malloc和free的上下都加了ti_sy***ios_knl_Task_disable和Task_enable函数,我理解的这两个函数是保护不被抢占的,不知道对不对。
这个问题困扰了我好久,望大牛们多多指教,小妹不胜感激。
举报

陈菊羽

2019-1-7 11:56:00
引用: wq644921241 发表于 2019-1-7 09:59
我把代码简化了一下,做了一个实验,代码的结构是这样的:多个线程,我在优先级第二大的TSK的开头写了两个for循环
/****连续申请****/
for(i=0;i<400;i++)

yu liang2,你好!
请问你测量malloc耗时的那张图是用什么工具产生的?它如何测量每个malloc的耗时?
举报

姬房有

2019-1-7 12:10:06
引用: 牵着灵魂散步 发表于 2019-1-7 10:17
yu liang2,你好!
请问你测量malloc耗时的那张图是用什么工具产生的?它如何测量每个malloc的耗时?

嘿嘿,其实我是定义了两个变量,比如
g_uiGetCycle1 = TSCL;
malloc();
g_uiGetCycle2 = TSCL;
g_uiGetCycle2减去g_uiGetCycle1就是malloc消耗的时间啦,然后在内存中看,就是我贴的图
举报

更多回帖

×
20
完善资料,
赚取积分