C语言中的函数调用
我的问题特别是C中的函数调用。所以,我们可以正常调用函数,也可以通过函数指针调用函数。当您的接口保持相同但具有不同的实现时,将使用函数指针,但即使您有一个具有函数指针的实现,也可以提高代码的可读性 那么,使用静态调用而不是动态函数指针有什么好处呢。显然,调用将在2条指令中实现,因为需要获取函数的地址,但返回将花费相同的周期。我只是想了解,处理器和编译器如何通过动态函数指针优化静态调用C语言中的函数调用,c,x86,x86-64,compiler-optimization,C,X86,X86 64,Compiler Optimization,我的问题特别是C中的函数调用。所以,我们可以正常调用函数,也可以通过函数指针调用函数。当您的接口保持相同但具有不同的实现时,将使用函数指针,但即使您有一个具有函数指针的实现,也可以提高代码的可读性 那么,使用静态调用而不是动态函数指针有什么好处呢。显然,调用将在2条指令中实现,因为需要获取函数的地址,但返回将花费相同的周期。我只是想了解,处理器和编译器如何通过动态函数指针优化静态调用 谢谢,通过指针调用函数在大多数情况下都会导致编译器无法内联调用(如果编译器已经确定这样做是有益的)。在某些情况下
谢谢,通过指针调用函数在大多数情况下都会导致编译器无法内联调用(如果编译器已经确定这样做是有益的)。在某些情况下,编译器甚至可以在编译时确定函数调用的结果,从而优化了函数的整个代码。函数指针也可以防止这种情况发生 但这并不意味着影响会以任何实际重要的方式显现出来。确定这一点的唯一方法是对代码进行基准测试/评测
然而,我不知道函数指针如何能够提供更好的代码可读性。您可能想给出一个例子。通过指针调用函数在大多数情况下会导致编译器无法内联调用(如果编译器已经确定这样做是有益的)。在某些情况下,编译器甚至能够在编译时确定函数调用的结果,从而优化了函数的整个代码。函数指针也可以防止这种情况发生 但这并不意味着影响会以任何实际重要的方式显现出来。确定这一点的唯一方法是对代码进行基准测试/评测
然而,我不知道函数指针如何能够提供更好的代码可读性。您可能想给出一个例子。一般来说,直接调用允许对编译器进行更多优化 如果真的只有一个实现,并且编译器可以看到它[*],那么它可以进行优化,并完全像直接调用一样进行操作。但这当然取决于编译器的智能程度以及您使用的优化选项
[*]即如果指针值在编译时已知;i、 e.如果它是“静态”变量,它的地址永远不会传递到编译单元之外,等等。通常,直接调用允许对编译器进行更多优化 如果真的只有一个实现,并且编译器可以看到它[*],那么它可以进行优化,并完全像直接调用一样进行操作。但这当然取决于编译器的智能程度以及您使用的优化选项
[*]即如果指针值在编译时已知;i、 e.如果它是“静态”变量,其地址从未传递到编译单元之外,等等。您表示使用函数指针比普通函数调用更具可读性,您介意详细说明您的想法吗?“…即使您有一个具有函数指针的实现,也可以提高代码的可读性…”。我不知道怎么做。您的确切意思是什么?您声明使用函数指针比普通函数调用更具可读性,您是否介意详细说明您的想法?“…即使您有一个具有函数指针的实现,也可以提高代码的可读性…”。我不知道怎么做。你这到底是什么意思?