怎样优化这段代码,让它的执行速度更快些?

yxy1977 2001-12-16 12:19:04
我需要频繁的调用这段代码,怎样才能让他执行起来更快些,请指教
for (i=1; ; i++)
{
code = Show_Bits(16);
if (code>=16384 && !intra_vlc_format)
tab = &DCTtabnext[(code>>12)-4];
else if (code>=1024)
{
if (intra_vlc_format)
tab = &DCTtab0a[(code>>8)-4];
else
tab = &DCTtab0[(code>>8)-4];
}
else if (code>=512)
{
if (intra_vlc_format)
tab = &DCTtab1a[(code>>6)-8];
else
tab = &DCTtab1[(code>>6)-8];
}
else if (code>=256)
tab = &DCTtab2[(code>>4)-16];
else if (code>=128)
tab = &DCTtab3[(code>>3)-16];
else if (code>=64)
tab = &DCTtab4[(code>>2)-16];
else if (code>=32)
tab = &DCTtab5[(code>>1)-16];
else if (code>=16)
tab = &DCTtab6[code-16];
else
return;
j = scan[ld1->alternate_scan][i];
.....
}
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxy1977 2001-12-17
  • 打赏
  • 举报
回复
谢谢几位的建议
xxtliu 2001-12-16
  • 打赏
  • 举报
回复
根据你所给的条件建一棵哈副曼树
once168 2001-12-16
  • 打赏
  • 举报
回复
1.将你的条件倒置(即<16移到第一个条件,这样可以省else)
2.直接取位(如code &0xfffff000:就是你的第一个条件)
3。你的数组可改成二维数组,算法更易统一
4。一个改进意建:你的程序可读性太差了!程序不仅是速度可读性也是很重要的,在不影响速度
时应增加可读性:如你的程序,最好是将code 如下定义

struct code
{
UNSHOT a:20;
unsigned long b:1;
...
}
后来自接用code::a就是你的code &0xfffff000
richen 2001-12-16
  • 打赏
  • 举报
回复
大体上就是这个思路,你还可以在可读性方面下一点心思,使代码更规整。
richen 2001-12-16
  • 打赏
  • 举报
回复
你可以建以数组:
void *pgoto();

*pgoto a[63];这个数组的下标作为索引,为了缩小数组的长度,所以对code值坐一下处理,int index=取整(code/16)
这样:
16---1
32---2,3
64---4 5 6 7
512---32。。。。。63
》=1024的可以作一下单独处理

数组元素是一个函数指针 形如:
void goto16(){
go to 16;
}


那 16 这个“lable” 对应的就是:16:tab = &DCTtab6[code-16];

这样做了一些工作之后就可以直接定位了,不必判断。



16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧