我使用的是g ++ 4.7,因为它是g ++的最新版本之一,它是第一个为c++11
添加真正支持的版本。
出于测试目的,我正在考虑代码from here。
You can find the complete source code here.
我将此源命名为lambda.cpp,并使用以下命令编译它:
g++-4.6 -std=c++0x lambda.cpp -o lambda46
g++-4.7 -std=c++11 lambda.cpp -o lambda47
lambda47可执行文件在lambda性能方面比lambda46慢约半秒,令人惊讶的是迭代器部分通常比lambda46快。
我也尝试过使用
g++-4.7 -std=c++0x lambda.cpp -o lambda47-0x
但基本上g ++ - 4.6总是生成比g ++ - 4.7更快的代码。
这是一种常见行为还是一个错误?
有一个编译器可以在C ++ 11中表现更好吗?
g ++ - 4.7已用
编译配置为:../ src / configure -v --with-pkgversion ='Ubuntu / Linaro 4.7.2-4precise1'--with-bugurl = file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages = c,c ++,go,fortran,objc,obj-c ++ - -prefix = / usr --program-suffix = -4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir = / usr / lib --without-included-gettext - -enable-threads = posix --with-gxx-include-dir = / usr / include / c ++ / 4.7 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable-clocale = gnu --enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu
g ++ - 4.6 with
配置为:../ src / configure -v --with-pkgversion ='Ubuntu / Linaro 4.6.3-1ubuntu5' - with-bugurl = file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages = c,c ++,fortran,objc,obj-c ++ --prefix = / usr --program-suffix = -4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir = / usr / lib --without-included-gettext --enable -threads = posix --with-gxx-include-dir = / usr / include / c ++ / 4.6 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable-clocale = gnu - -enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu
答案 0 :(得分:1)
就我而言,使用g ++ 4.6和4.7(和g ++ 4.7生成比4.6更快的代码)的lambda版本更快。与您的唯一区别是我使用的是32位版本的编译器。
但是如果我用-O3编译你的代码,迭代器会更快约2秒。