我把代码简化了一下,做了一个实验,代码的结构是这样的:多个线程,我在优先级第二大的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函数,我理解的这两个函数是保护不被抢占的,不知道对不对。
这个问题困扰了我好久,望大牛们多多指教,小妹不胜感激。
我把代码简化了一下,做了一个实验,代码的结构是这样的:多个线程,我在优先级第二大的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函数,我理解的这两个函数是保护不被抢占的,不知道对不对。
这个问题困扰了我好久,望大牛们多多指教,小妹不胜感激。
举报