ZHDA315 September   2026 MSPM0C1103 , MSPM0C1103-Q1 , MSPM0C1104 , MSPM0C1104-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2C 编译器优化
    1. 2.1 优化设置
      1. 2.1.1 优化级别
      2. 2.1.2 Optnone
      3. 2.1.3 链接时优化 - LTO
    2. 2.2 运行时模型选项
      1. 2.2.1 数据段与函数段
      2. 2.2.2 函数外提
  6. 3编码技巧
    1. 3.1 为变量和常量选用尽可能小的类型
    2. 3.2 避免乘法和除法
    3. 3.3 使用查找表代替手动计算
    4. 3.4 高效使用函数
    5. 3.5 实现递减计数循环
    6. 3.6 使用 __even_in_range() 内建函数
    7. 3.7 volatile 关键字
  7. 4示例
    1. 4.1 优化级别
    2. 4.2 LTO
    3. 4.3 运行时模型选项
  8. 5总结
  9. 6参考资料

避免乘法和除法

乘法与除法运算需要耗费大量周期来执行,并且需要更多代码来实现这些运算。因此,设法从代码中去除不必要的乘法或除法,是节省代码空间和执行时间的绝佳途径。

对于乘以或除以 2 的幂(例如 2、4、8、16、……)的情况,可以使用位移来代替。在 C 中进行位移,使用 >> 表示右移,<< 表示左移,后接要移位的位数。这比乘法或除法高效得多,因为 CPU 中有用于位移的汇编指令和硬件。

另一种方法是判断乘法或除法能否在编译时而非运行时计算。例如,当两个常量相乘且不涉及变量时,编译器可以在编译期间算出结果并直接使用该计算值,从而省去原本会同时消耗内存和执行时间的乘法代码。

如果乘法中涉及某个变量,因而无法全部提前计算,而该变量又具有已知的取值范围,就可以创建一张查找表来存放各种可能的结果。