gpt4 book ai didi

c++ - 为什么 boost::function 慢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:17 26 4
gpt4 key购买 nike

我当时正在做一些计时测试,其中一项测试是比较不同的函数调用方式。我使用各种方式调用了 N 个函数。我尝试了常规函数调用、虚函数调用、函数指针和 boost::function。

我在 Linux 中使用 gcc 和 -O3 优化完成了这项工作。

正如预期的那样,虚拟调用比常规函数调用慢。然而令人惊讶的是,boost::function 的时钟频率比虚拟调用慢 33%。

有没有人注意到这一点?有什么线索可以解释这是为什么吗?

最佳答案

如果可能,编译器可以内联常规函数,但 boost::function 不能永远内联。这是一个很大的区别。

第二个区别是,boost::function 实现了 type-erasure这意味着它使用间接 来调用实际函数。意味着它首先调用一个虚函数,然后调用你的函数。所以通常它涉及(最少)两个函数调用(其中一个是 virtual)。这是巨大的差异。

因此根据这一分析,可以推断出这一点(甚至无需编写测试代码):

slowest ------------------------------------------------------> fastest 
boost::function < virtual function < regular function
slowest ------------------------------------------------------> fastest

确实如此,在你的测试代码中。

请注意,对于 std::function 也是如此(自 C++11 起可用)。

关于c++ - 为什么 boost::function 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13747916/

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