内联函数!计算时间问题

问题描述

内联函数!计算时间问题

//======================================
//内联函数有内,计算时间差
//======================================
#include
#include
using namespace std;
int cale1(int a,int b){
return a+b;
}
inline int cale2(int a,int b){
return a+b;
}
int main(){
int x[1000];
int y[1000];
int z[1000];
clock_t t=clock();
for(int i=0;i<1000;++i)
for(int j=0;j<1000;++j)
for(int m=0;m<1000;++m)
z[i]=cale1(x[j],y[m]);
cout<<"not using inline: "<<(clock()-t)/CLK_TCK<<" seconds
";
t=clock();
for(int i=0;i<1000;++i)
for(int j=0;j<1000;++j)
for(int m=0;m<1000;++m)
z[i]=cale2(x[j],y[m]);
cout<<" using inline: "<<(clock()-t)/CLK_TCK<<" seconds
";
}
运行结果:

为什么运行时间是一样的?

解决方案

编译的时候没开优化选项吧,没有优化选项,inline函数跟非inline函数是一样的

解决方案二:

内联函数
函数内联
内联函数

时间: 2024-12-03 23:47:24

内联函数!计算时间问题的相关文章

深入探讨:宏、内联函数与普通函数的区别_C 语言

内联函数的执行过程与带参数宏定义很相似,但参数的处理不同.带参数的宏定义并不对参数进行运算,而是直接替换:内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数.    内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定:而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患.    使用内联函数时,应注意以下问题:    1)内联函数的定

C++中内联函数的定义和使用

引入内联函数的目的是为了解决程序中函数调用的效率问题. 函数是一种更高级的抽象.它的引入使得编程者只关心函数的功能和使用方 法,而不必关心函数功能的具体实现:函数的引入可以减少程序的目标代码,实 现程序代码和数据的共享.但是,函数调用也会带来降低效率的问题,因为调用 函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序 内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去前 要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执 行.因此,函数调

宏与内联函数

第一部分:宏     为什么要使用宏呢?     因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行.因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率.而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率.     但是宏也有很多的不尽人意的地方.    

C++编程中队内联函数的理解和使用_C 语言

函数调用过程c++经过编译生成可执行程序文件exe,存放在外存储器中.程序启动,系统从外存储器中将可执行文件装载到内存中,从入口地址(main函数起始处)开始执行.程序执行中遇到了对其他函数的调用,就暂停当前函数的执行,并保存下一条指令的地址作为从被调函数返回后继续执行的入口点,保存现场.然后转到被调函数的入口地址执行被调函数.遇到return语句或者被调函数结束后,恢复先前保存的现场,从先前保存的返回地址处继续执行主调函数的其余部分. 内联函数函数调用需要进行现场保护,以便在函数调用之后继续进

详解C++中的内联函数和函数重载_C 语言

内联函数(内嵌函数,内置函数) 调用函数时需要一定的时间和空间的开销.C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开.这种在函数调用处直接嵌入函数体的函数称为内联函数(inline function),又称内嵌函数或内嵌函数. 指定内联函数的方法很简单,只需要在定义函数时增加 inline 关键字. 注意:是在函数定义时增加 inline 关键字,而不是在函数声明时.在函数声明时增加 inline 关键虽然没有错误,但是也没有任何效果 inline 关键

(一〇二)内联函数

元旦了,各种打不开博客.元旦结束,博客好了,是因为元旦放假程序员都回家了嘛? -------------------------------- 内联函数和普通函数有所区别.   普通函数需要①函数定义②函数原型③函数调用,具体调用形式是,先调用时,储存当前函数的内存地址(假设为地址A),然后调用函数,跳到被调用函数的内存地址(地址B),然后在地址B处依次执行,等执行完被调用的函数(或许还有返回值),再返回之前储存的地址A处.   内联函数,可以省略②函数原型(也可以不省略),但需要在函数定义和函

c++内联函数(inline)使用详解_C 语言

介绍内联函数之前,有必要介绍一下预处理宏.内联函数的功能和预处理宏的功能相似.相信大家都用过预处理宏,我们会经常定义一些宏,如 复制代码 代码如下: #define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏. 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行.因此,函数调

特殊用途语言特性——默认参数、内联函数和constexptr函数

1 默认实参 某些函数有这样一些参数,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 我们可以为一个或多个形参定义默认值,不过需要注意的是,一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值.   使用默认实参调用函数 如果我们想使用默认实参,只要在调用函数的时候省略该实参就可以了. 函数调用调用时实参按其位置解析,默认实参负责填补函数调用缺少的尾部实参(靠右侧位置). 当设计含有

sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date desc 逻辑上看着挺对 但是报错: 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效. 只要我们在嵌套子查询视图里面加入: top 100 percent 即可 select * from ( select top 100 p