Code Bye

c++ lambda表达式的效率对比问题

float test()
{
return 333 * 2.43;
}
for (size_t i = 0; i < 10000000; i++)
{
test();
}
for (size_t i = 0; i < 10000000; i++)
{
auto f = []()->float{return 333 * 2.43; };
f();
}
这样测出来2者效率不相上下(一千万次循环lambda表达式那个只慢了不到5毫秒),本人觉得不科学,是不是编译器优化了本人的测试代码,不然每次循环都要多一次定义,效率怎么会都不落下,
解决方案:10分
本人以前也以为c++11的lambda就是一个函数指针, 所以存在效率问题.
然后发现实际是个functor, 效率是绝对的.
解决方案:5分
这么简单的情况,肯定优化了,看看汇编就知道了。
解决方案:20分
$ cat test.cpp
#include <cstdlib>
float test()
{
    return 333 * 2.43;
}
int main(int, const char **)
{
    for (size_t i = 0; i < 10000000; i++)
    {
        test();
    }
    for (size_t i = 0; i < 10000000; i++)
    {
        auto f = []()->float {return 333 * 2.43; };
        f();
    }
    return 0;
}
$ g++ --std=c++11 --pedantic -g -O2 test.cpp
$ g++ --version
g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ objdump -d a.out > a.ss

a.ss

0000000000400400 <main>:
  400400:   31 c0                   xor    %eax,%eax
  400402:   c3                      retq

优化之后 main 只剩了一句 return 0;


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++ lambda表达式的效率对比问题