Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的函数调用_C_X86_X86 64_Compiler Optimization - Fatal编程技术网

C语言中的函数调用

C语言中的函数调用,c,x86,x86-64,compiler-optimization,C,X86,X86 64,Compiler Optimization,我的问题特别是C中的函数调用。所以,我们可以正常调用函数,也可以通过函数指针调用函数。当您的接口保持相同但具有不同的实现时,将使用函数指针,但即使您有一个具有函数指针的实现,也可以提高代码的可读性 那么,使用静态调用而不是动态函数指针有什么好处呢。显然,调用将在2条指令中实现,因为需要获取函数的地址,但返回将花费相同的周期。我只是想了解,处理器和编译器如何通过动态函数指针优化静态调用 谢谢,通过指针调用函数在大多数情况下都会导致编译器无法内联调用(如果编译器已经确定这样做是有益的)。在某些情况下

我的问题特别是C中的函数调用。所以,我们可以正常调用函数,也可以通过函数指针调用函数。当您的接口保持相同但具有不同的实现时,将使用函数指针,但即使您有一个具有函数指针的实现,也可以提高代码的可读性

那么,使用静态调用而不是动态函数指针有什么好处呢。显然,调用将在2条指令中实现,因为需要获取函数的地址,但返回将花费相同的周期。我只是想了解,处理器和编译器如何通过动态函数指针优化静态调用


谢谢,

通过指针调用函数在大多数情况下都会导致编译器无法内联调用(如果编译器已经确定这样做是有益的)。在某些情况下,编译器甚至可以在编译时确定函数调用的结果,从而优化了函数的整个代码。函数指针也可以防止这种情况发生

但这并不意味着影响会以任何实际重要的方式显现出来。确定这一点的唯一方法是对代码进行基准测试/评测


然而,我不知道函数指针如何能够提供更好的代码可读性。您可能想给出一个例子。

通过指针调用函数在大多数情况下会导致编译器无法内联调用(如果编译器已经确定这样做是有益的)。在某些情况下,编译器甚至能够在编译时确定函数调用的结果,从而优化了函数的整个代码。函数指针也可以防止这种情况发生

但这并不意味着影响会以任何实际重要的方式显现出来。确定这一点的唯一方法是对代码进行基准测试/评测


然而,我不知道函数指针如何能够提供更好的代码可读性。您可能想给出一个例子。

一般来说,直接调用允许对编译器进行更多优化

如果真的只有一个实现,并且编译器可以看到它[*],那么它可以进行优化,并完全像直接调用一样进行操作。但这当然取决于编译器的智能程度以及您使用的优化选项


[*]即如果指针值在编译时已知;i、 e.如果它是“静态”变量,它的地址永远不会传递到编译单元之外,等等。

通常,直接调用允许对编译器进行更多优化

如果真的只有一个实现,并且编译器可以看到它[*],那么它可以进行优化,并完全像直接调用一样进行操作。但这当然取决于编译器的智能程度以及您使用的优化选项


[*]即如果指针值在编译时已知;i、 e.如果它是“静态”变量,其地址从未传递到编译单元之外,等等。

您表示使用函数指针比普通函数调用更具可读性,您介意详细说明您的想法吗?“…即使您有一个具有函数指针的实现,也可以提高代码的可读性…”。我不知道怎么做。您的确切意思是什么?您声明使用函数指针比普通函数调用更具可读性,您是否介意详细说明您的想法?“…即使您有一个具有函数指针的实现,也可以提高代码的可读性…”。我不知道怎么做。你这到底是什么意思?