通常函数调用需要一定的时间开销。这意味着执行调用时需要花费时间用于建立调用、传递参数,跳转到函数代码段并返回。
我们知道使用类函数宏的一个原因就是可减少执行时间。
c99提供另一方法:内联函( nline function)。c99标准这样叙述:“把函数变为内联函数将建议编译器尽可能快速地调用该函数,上述建议的效果由实现来定义”。因此,使函数变为内联函数可能会简化函数的调用机制,但也有可能不起作用。
创建内联函数的方法是在函数声明中使用函数说明符 inline。通常,首次使用内联函数前在文件中对该函数进行定义。因此,该定义也作为函数原型。也就是说,代码应像下面这样:
编译器看到内联声明后会用 eatline()函数体代替函数调用,其效果如同您在此处键入了函数体的代码:
看一个直观简单的内联函数的例子:
这是标准的内联函数的用法,在每个for循环的内部任何调用dbtest(i)的地方都换成了(i%2>0)?奇:偶这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
内联函数的特点:
关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。这就意味着内联函数的定义和对该函数的调用必须在同一个文件中,正是由于这样,内联函数通常具有内部链接,因此,在多文件程序中,每一个调用内联函数的文件都要对该函数进行定义。达到这个目标最简单的方法是:在头文件中定义内联函数,并在使用该函数的文件中包含该头文件。我们一般不在头文件中放置可执行代码,但是内联函数是一个意外,它具有内部链接,所以在多个文件中定义同一个内联函数不会产生什么问题。inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句。例如while、switch,并且内联函数本身不能是直接递归函数。内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
做网站建设时需要考虑的几个方面如何选择上海网络推广公司?营销型网站建设必须要注意的问题网页搜索百度搜索实战工具「网页搜索」企业定制网站建设的五个帮助怎么使网站加入广告而又不影响速度用此六个方法优化自己的企业网站建设一个景区网站的好处和必要性