[ARM入门] 代码优化技巧-查表法

[复制链接]
1489|0
 楼主| 呐咯密密 发表于 2024-3-25 10:11 | 显示全部楼层 |阅读模式

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

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

使用查表法:

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

  6. cnt = table[temp];

  7. return cnt;
  8. }
优于:
  1. int get_digits_1_num(unsigned char data)
  2. {
  3. int cnt = 0;
  4. unsigned char temp = data & 0xf;  

  5. for (int i = 0; i < 4; i++)
  6. {
  7.   if (temp & 0x01)
  8.   {
  9.    cnt++;
  10.   }
  11.   temp >>= 1;
  12. }

  13. return cnt;
  14. }


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

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



您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

568

主题

4087

帖子

56

粉丝
快速回复 在线客服 返回列表 返回顶部