gpt4 book ai didi

c - 为什么asm代码在C中的函数比c代码函数花费更多的时间?

转载 作者:行者123 更新时间:2023-11-30 18:33:49 24 4
gpt4 key购买 nike

我使用 GCC 的 "asm" 关键字用 C 语言编写了一个简单的乘法函数,并用汇编代码编写了另一个函数。

我计算了它们每个的执行时间,虽然它们的时间非常接近,但 C 函数比汇编代码中的函数快一点。

我想知道为什么,因为我期望 asm 更快。是因为GCC的“asm”关键字有额外的“call”(我不知道该用什么词)吗?

这是 C 函数:

int multiply (int a, int b){return a*b;}

这是 C 文件中的 asm:

int asmMultiply(int a, int b){  
asm ("imull %1,%0;"
: "+r" (a)
: "r" (b)
);
return a;
}

我主要花时间的地方:

int main(){
int n = 50000;
clock_t asmClock = clock();
while(n>0){
asmMultiply(4,5);
n--;
}

asmClock = clock() - asmClock;
double asmTime = ((double)asmClock)/CLOCKS_PER_SEC;

clock_t cClock = clock();
n = 50000;
while(n>0){
multiply(4,5);
n--;
}
cClock = clock() - cClock;
double cTime = ((double)cClock)/CLOCKS_PER_SEC;

printf("Asm time: %f\n",asmTime);
printf("C code time: %f\n",cTime);

谢谢!

最佳答案

汇编函数比 C 函数做更多的工作 - 它初始化 mult,然后进行乘法并将结果分配给 mult,然后将值从mult 进入返回位置。

编译器善于优化;在基本算术上你不会轻易击败他们。

如果你确实想要改进,请使用static inline int multiply(int a, int b) { return a * b; }。或者只需在调用代码中写入 a * b (或等效内容),而不是 int x =multiply(a, b);

关于c - 为什么asm代码在C中的函数比c代码函数花费更多的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54849386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com