我目前正在C中制作一个需要找到数十亿平方根的程序。我查找了哪些已知代码更快地找到了平方根并且遇到了这个看起来最快的代码。 https://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi
double inline __declspec (naked) __fastcall sqrt(double n)
{
_asm fld qword ptr[esp + 4]
_asm fsqrt
_asm ret 8
}
我对汇编语言了解不多,所以有人可以解释这段代码的算法和这些关键字的含义吗?
答案 0 :(得分:-1)
这是标准naked
功能的Microsoft特定fast call
sqrt
。
有关详细信息,请查看Microsoft文档。
裸存储类属性是特定于Microsoft的C语言扩展。对于使用naked storage-class属性声明的函数,编译器生成没有prolog和epilog代码的代码。您可以使用此功能使用内联汇编程序代码编写自己的prolog / epilog代码序列。裸函数在编写虚拟设备驱动程序时特别有用。 请参阅:Naked functions。
__fastcall
调用约定指定函数的参数尽可能在寄存器中传递。此调用约定仅适用于x86体系结构。看一眼:
__fastcall
__fastcall
。通常,fastcall调用约定在寄存器中传递一个或多个参数,这减少了调用所需的内存访问次数。通过片上缓存,寄存器中传递信息的收益并不像以前那么大。
现在__stdcall
实际上可能更快。