打印
[ARM入门]

代码优化技巧-查表法

[复制链接]
371|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呐咯密密|  楼主 | 2024-3-25 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在内存空间较为充足的情况下,有时候可以牺牲一些空间来换取程序的运行速度。查表法就是 以空间换取时间 的典型例子。

比如:编写程序统计一个4bit(0x0~0xF)数据中1的个数。

使用查表法:

static int table[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
int get_digits_1_num(unsigned char data)
{
int cnt = 0;
unsigned char temp = data & 0xf;  

cnt = table[temp];

return cnt;
}
优于:
int get_digits_1_num(unsigned char data)
{
int cnt = 0;
unsigned char temp = data & 0xf;  

for (int i = 0; i < 4; i++)
{
  if (temp & 0x01)
  {
   cnt++;
  }
  temp >>= 1;
}

return cnt;
}


查表法把0x0~0xF中的所有数据中每个数据的1的个数都记录下来,存放到一个表中。这样一来,数据数据中1的个数就建立起了一一对应关系,就可以通过数组索引来获取得到结果。常规法使用for循环的方式来实现,缺点是占用了不少处理器的时间。

特别地,对于越复杂地运算,查表法较常规法更有优势。另一方面,查表法的代码往往比常规法要简洁些。



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

355

主题

2806

帖子

41

粉丝