我之所以使用g++ 4.7,是因为它是g++的最新版本之一,也是第一个真正支持c++11的版本。
为了测试目的,我正在考虑使用从这里开始的代码。
您可以在这里找到完整的源代码。
我将此源命名为lambda.cpp,并将其编译为:
g++-4.6 -std=c++0x lambda.cpp -o lambda46
g++-4.7 -std=c++11 lambda.cpp -o lambda47当涉及到lambda性能时,lambda47可执行文件比lambda46慢了大约半秒,令人惊讶的是迭代器部分通常比lambda46快。
我也试过用
g++-4.7 -std=c++0x lambda.cpp -o lambda47-0x但基本上g++-4.6总是比g++-4.7生成更快的代码。
这是一种常见的行为还是一种bug?
有一个编译器可以更好地使用C++11吗?
g++-4.7已用
配置为:../src/ -v --与-pkgversion=‘Ubuntu/Linaro 4.7.2-4 predicise1’-v-启用--v=c,c++,go,fortran,objc,obj-c++ -前缀=/usr--程序-后缀-启用-共享-启用-linker-build with-system-zlib-libexecdir=/usr/lib-不包括-gettext-启用线程=posix-with-gxx-包含-dir=/usr/包括/c++/4.7-libdir=/usr/lib-启用-nls-with-sysroot=/-启用-clocale=gnu-启用-启用-libstdcxx-调试-启用-libstdcxx-time=-gnu唯一对象??启用??插件??启用??objc?gc??禁用??werror with-arch-32=i 686-??with-调=泛型??启用-检查=发布-构建=x86_64-linux-gnu-host=x86_64-linux-gnu-target=x86_64-linux-gnu。
g++-4.6与
配置为:../src/ -v --=‘Ubuntu/linaro4.6.3-1 ubuntu5’-v-启用--v=c,c++,fortran,objc,obj-c++ -前缀=/usr--程序-后缀-启用-共享-启用-linker-id-with-system-zlib-libexecdir=/usr/lib-不包括-gettext-启用线程=posix-with-gxx-include-dir=/usr/4.6-libdir=/usr/lib-启用-nls-with-sysroot=/-启用-clocale=gnu-启用-启用-libstdcxx-调试-启用-libstdcxx-time=-gnu唯一对象??启用??插件??启用??objc?gc??禁用??werror with-arch-32=i 686-??with-调=泛型??启用-检查=发布-构建=x86_64-linux-gnu-host=x86_64-linux-gnu-target=x86_64-linux-gnu。
发布于 2012-11-04 16:48:35
在我的例子中,g++ 4.6和4.7 ( g++ 4.7产生比4.6更快的代码)的lambda版本更快。与您唯一不同的是,我使用的是32位版本的编译器。
但是如果我用-O3编译您的代码,迭代器的速度大约要快2秒。
https://stackoverflow.com/questions/13068658
复制相似问题