拘留时间怎么计算:一个关于C++内联的奇怪问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/11 18:10:38
有如下程序
#include <math.h>
#include <iostream.h>
#include <map>
#include <windows.H>
using namespace std;

inline bool aless(int f,int e)
{
return f<e;
}

#define bless(f,e) (f<e)

void test(int n)
{
int i,j=0;
for(i=0;i<n;i++)
{
if(aless(i,n))//替换成bless快很多
{
j++;
}
else break;
}
}

int main(int argc, char* argv[])
{
unsigned long t;
char c;
t=GetTickCount();
test(10000000);
t=GetTickCount()-t;
cout<<"t="<<t<<endl;
cin>>c;
return 0;
}
按道理来说aless和bless完成任务的效率应该是一样的,怎么aless要慢很多呢?
我看了汇编代码,用aless的时候编译器居然用到了一个call,和不用内联的汇编代码是一样的,这不是违背了内联减少堆栈调用的初衷吗,内联岂不是形同虚设?
测试编译器用了VC6和C++ BUILDER6,都有这个问题