我写了一段代码,其中有一个数据:
unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
我将每 3 个连续字节的 i/p 数据相加并存储 ans。例如:温度[4096];临时[0] = buf[0] + buf[1] + buf[2];... 直到 4096
然后使用以下代码从 temp 的结果生成直方图:
for(i = 0; i < 4096; i++)
counter[temp[i]]++;
对直方图进行排序(冒泡排序),然后取前 8 个最常出现的值。代码在linux内核(2.6.35)中运行
我面临的问题是,如果我删除排序部分,执行代码所需的时间非常快(在我的笔记本电脑上为 6 微秒,使用 gettimeofday func 测量)。但是在引入排序之后,这个过程在很大程度上减慢了(44微秒)。排序功能本身需要 20 微秒,我不明白为什么时间会增加这么多。我使用 cachegrind 进行了内存分析,结果是正常的,我什至尝试禁用抢占,但它仍然没有显示任何差异。如果有人可以在这里帮助我。谢谢!