我编写了一个自定义 C 代码,其中包含 main 和另一个由 main 调用的函数。我多次执行此功能(〜100万)。在一个代码中,我将此函数声明为 __inline,而在另一个代码中,我将其声明为 __declspec(noinline)。我使用 WinDBG 监视了反汇编,发现后者像普通函数调用一样使用 push pop 和分支,而前者没有使用此类指令并正确内联函数。然而他们两人的时间却完全一样。以下是代码:(在 A9 cortex CPU (Tegra 3) 上执行此代码)
__inline int multifunc(int a, int b);
int main(int argc, char **argv) {
unsigned long int timeBefore, i;
unsigned long int timeAfter;
unsigned int a[11500], j, k, l;
double elapsed;
timeBefore = GetTickCount();
printf("\n%ld", timeBefore);
for(l=1; l<300;l++)
{
for(i=0; i<11500; i++)
{
j = i+l;
k=1;
a[i] = multifunc(j, k);
}
}
printf("\n%ld", timeBefore);
timeAfter = GetTickCount();
printf("\n%ld", timeAfter);
return -1;
}
__inline int multifunc(int a, int b)
{
int d;
d = a+b;
printf("%d", d);
return d;
}
谁能解释我为什么?我为第二次测试所做的只是将 __inline 更改为 __declspec(noinline)。