高效的C编程之: 函数调用(终)

来源:本站
导读:目前正在解读《高效的C编程之: 函数调用(终)》的相关信息,《高效的C编程之: 函数调用(终)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《高效的C编程之: 函数调用(终)》的详细说明。
简介:函数设计的基本原则是使其函数体尽量的小。这样编译器可以对函数做更多的优化。(EEFOCUS)

14.9.5单纯子函数

所谓单纯子函数(PureFunctions)是指那些函数返回值只和调用参数有关。换句话说,就是如果调用函数的参数相同,那么函数的返回结果也相同。如果程序中存在这样的函数,可以在函数定义时使用_pure进行声明,这样在程序编译时编译器会根据函数的调用情况对其进行优化。

下面的例子显示了当函数用_pure声明时,编译器对其所做的优化。

程序源码文件如下。

intsquare(intx)

{

returnx*x;

}

intf(intn)

{

returnsquare(n)+square(n)

}

编译后的结果如下。

square

MOVa2,a1

MULa1,a2,a2

MOVpc,lr

f

STMDBsp!,{lr}

MOVa3,a1

BLsquare

MOVa4,a1

MOVa1,a3

BLsquare

ADDa1,a4,a1

LDMIAsp!,{pc}

上面的程序中,square函数为“单纯子函数”,当使用_pure声明该函数时编译器在调用该函数时,将对程序进行优化。

声明的方法和编译后的结果如下所示。

__pureintsquare(intx)

{

returnx*x;

}

f

STMDBsp!,{lr}

BLsquare

MOVa1,a1,LSL#1

LDMIAsp!,{pc}

从编译后的代码中可以看到,用_pure声明的函数在f函数中只调用了一次。

虽然“单纯子函数”可以提高代码执行效率,但同时也会带来一些负面影响。比如,在“单纯子函数”中,不能直接或间接访问内存地址。所以在程序中使用“单纯子函数”时要特别小心。

另外,还可以使用#pragma声明“单纯子函数”,下面的代码显示了它的声明过程。

#pragmano_side_effects

/*functiondefinition*/

#pragmaside_effects

提醒:《高效的C编程之: 函数调用(终)》最后刷新时间 2024-03-14 01:07:24,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《高效的C编程之: 函数调用(终)》该内容的真实性请自行鉴别。