[DSP+ARM] 函数优化(整理)

50 篇文章 1 订阅
32 篇文章 3 订阅

原帖: http://bbs.21ic.com/icview-382765-1-1.html

===============================================================================================================================


Inline函数 

在 C++ 中,关键字 Inline 可以被加入到任何函数的声明中。 这个关键字请求编译器用函数内部的代码替换所有对于指出的函数的调用。(注: C99 标准也支持了 inline 关键字, 用于支持内联函数. 更多参考: 点击打开链接 好吧. 英文的 ^_^)

===============================================================================================================================

这样做在两个方面快于函数调用:第一,省去了调用指令需要的执行时间;第二,省去了传递变元和传递过程需要的时间。(注: 类似于宏函数, 但是他们是有区别的. 啥区别呢? 参考这四个链接: 第一个  第二个  第三个  第四个)

===============================================================================================================================

但是使用这种方法在优化程序速度的同时,程序长度变大了,因此需要更多的 ROM 。
使用这种优化在 Inline 函数频繁调用并且只包含几行代码的时候是最有效的。

===============================================================================================================================

不定义不使用的返回值.

===============================================================================================================================

对,函数定义并不知道函数返回值是否被使用,假如返回值从来不会被用到,应该使用 void 来明确声明函数不返回任何值。

===============================================================================================================================

减少函数调用参数. (对于像 ARM 这样的 CPU, 他有自己的过程调用标准   AAPCS )

===============================================================================================================================

嗯,使用 全局变量 比函数传递参数更加有效率。这样做去除了函数调用参数入栈和函数完成后参数出栈所需要的时间。

===============================================================================================================================

然而决定使用全局变量会影响程序的模块化和重入,故要慎重使用。(可以使用全局的结构体来把全局变量聚集起来, 防止满天飞.)

===============================================================================================================================

所有函数都应该有原型定义. (??? 原型定义??? 不懂. 求高手解释, 没定义, 编译能通过? C++ 的?)

===============================================================================================================================

一般来说,所有函数都应该有原型定义。原型定义可以传达给编译器更多的可能用于优化的信息。

===============================================================================================================================

尽可能使用常量(const).

===============================================================================================================================

嗯,C++ 标准规定,如果一个 const 声明的对象的地址不被获取,允许编译器不对它分配储存空间。

===============================================================================================================================

把本地函数声明为静态的(static). (注: 从反汇编的结果就知, 另外有利于程序的模块化)

===============================================================================================================================

如果一个函数只在实现它的文件中被使用,把它声明为静态的 (static)以强制使用内部连接。否则,默认的情况下会把函数定义为外部连接。

===============================================================================================================================

是啊,这样可能会影响某些编译器的优化——比如,自动内联.

===============================================================================================================================

当然了, 我还是认为对于函数内部的处理, 算法层面的优化是第一位的.

===============================================================================================================================

===============================================================================================================================



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值