通关旅

softgamer的痕迹
posts - 16, comments - 13, trackbacks - 0, articles - 0

C++体会 -- 内联函数

Posted on 2007-02-05 21:04 softgamer 阅读(379) 评论(3)  编辑 收藏 引用 所属分类: 学习日志
    内联函数

   C++ 提供了内联函数(inline functions ),主要用于减少函数所使用的开销,尤其对于小型函数

   函数返回类型之前的限定符inline 让编译器在适当的程序部分生成函数的副本,以避免函数调用,这样使程序中插入多个函数
代码的副本,令程序增大。而不是一个函数的副本(每次调用函数时,控制都会传到函数中)。

   对内联函数的更改都需要重新编译该函数的所有调用者,这会大大影响程序的维护,所以inline用于小型的,使用频繁的函数最好.
而且
内联函数也使程序的执行时间减少,但在编译时增大了程序的长度,当然也不绝对,有时也会减小程序长度,特别是内联函数是非常小的函数时。


   题外话, 使用const的目的在函数中只是保护原始实参的副本,而不是原始实参本身。


 



Feedback

# re: C++体会 -- 内联函数  回复  更多评论   

2007-02-06 10:19 by gql
"内联会增大程序的代码",这是想当然,实际并非如此,如:
class C
{
int n_;
public :
inline int get_n() { return n_; }
};

C c;
int value = c.get_n(); // 1
如果编程器在1处调用c.get()而不是内联它,那比内联的代码长度更大。想下就知道,为了调用c.get()编译器首先要把返回地址压栈,在函数内还要设置堆栈指针,拷贝c.n_到eax, 然后出栈,拷贝eax的值到value中,可以算下这有多少条代码。若直接内联不过两条而已。

# re: C++体会 -- 内联函数[未登录]  回复  更多评论   

2007-02-06 11:57 by softgamer
@gql
当然,内联函数也可能减小执行代码的尺寸。特别是,当调用函数的代码总量大于展开的内联函数的代码总量。
这样的情况会发生于非常小的函数。
inline int get_n() { return n_; }
是非常小的函数了,也是我们常用的,请你再加两三行看看,然后调用两次。
事无绝对,但内联函数在编译器编译时大部分会增加长度,也是事实。
就像数学的拐点,在此点以下,数值很小,此点以上数值增大。
也是我没写清楚。

# re: C++体会 -- 内联函数  回复  更多评论   

2007-02-06 16:59 by gql
个人浅见,见笑了。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理