函数的解析之C/C++

来源:互联网 发布:网络渗透技术教程 编辑:程序博客网 时间:2024/06/05 11:09

      函数是程序的执行模块,是整个项目的细胞,如何组织好每一个函数的结构,如何提高程序的可读性和运行效率,是程序员们不断品味的主体。有时函数的设计能直接体现出程序员对C/C++的理解和感悟。

 

      C/C++的函数类型不对外乎以下几种,有些描述可能不太贴切:

      一般函数,函数重载,虚函数,函数模板,内联函数,静态函数,回调函数,宏定义实现函数效果。

 

1. 函数重载:

    编译时根据参数进行重载解析,执行和一般的函数一样。无附加效率开销,只是编译期间价格表之区分参数和返回而已。


2. 虚函数:

    对于满足多态的有运行时开销,对于其它的,和普通成员函数一样。运行时多态,这时候会因为虚表的维护而变慢,这是面向对象编程相对于纯C主要的开销增加,首先要知道一点,虚函数只有对针和引用才能有效,对象不行。


3. 函数模板:

    显示或者隐式实例化,非成员模板函数的和非成员函数一样,成员模板函数和成员函数一样。虚函数是运行时多态,你可以把模板理解为“编译期多态”,会根据你的调用实现多个函数体,增加体积开销,但效率高,因为就和普通函数一样了。


4. 内联函数:

    代码可能在调用处展开,要求调用时看到的不只是声明,保证在所有的模块中地址一样。可以理解为宏的函数写法,用到的时候直接取代的,没有函数调用的开销,只有代码执行开销


5. 静态函数:

    一般的只限制在该模块内可见,而类中的和普通函数一样。可认为该类对于他仅仅是个命名空间,没有其他的关系,关键是没有this指针,所以无法调用其他成员,效率上和普通函数一样


6. 回调函数:

    __stdcall的函数指针。一般在C/C++里函数参数里的函数指针(多线程,qsort)就是回调函数,要将函数地址传给另一个函数,又另一个函数调用本函数,这是一种函数用法,不是函数类型,不过由于取值的关系,回调函数不能内联,要求静态或全局(成员函数理论上也可以,但是比较非主流),相对于内联和宏比较慢。


7. 宏定义函数:

    宏就是“替代”,可以起到内联函数的作用。

 

 对于一般函数会有一个跳转表:jmp XXXX。对于一般静态的函数,没有。对于release可能不会有这个跳转表。

原创粉丝点击