测试不同平台不同编译器效率
gpt回答
在 Linux 上,使用 g++
编译 C++ 项目时,默认的编译模式既不是 Debug
也不是 Release
,而是无优化且不包含调试信息的状态。这意味着如果你不显式地指定编译选项,g++
将不会启用任何优化,也不会包括调试信息。
默认编译设置
- 优化: 默认情况下,
g++
不启用优化(即没有-O
选项)。 - 调试信息: 默认情况下,
g++
不包含调试信息(即没有-g
选项)。
总结
- release是debug的10倍速度以上,但是不同release之间速度差异不大,且default和debug类似。
- debug文件最大,relwithdebinfo有调试信息,不是最小,release最小。
- 可以看出windows上msvc,release是优化/O2,debug是/Od。
- clang编译器debug模式是最快的。release模式,速度都差不多。
- debug/release模式中msvc都是最慢的。
- 新版mingw gcc14,比旧版gcc7.3,release速度要快。
- -O2 和 -O3看不出差距,平时都可以。
- windows/centos/mac/虚拟机ubuntu,默认-O0。所以cmake平时需要开release,才可以。
- 加入调试信息,-g,不会影响速度。
测试程序
1 |
|
windows速度测试r9000-2021
MSVC 19.40.33814.0
debug
1.01553+-0.0173908 seconds
release
0.0932541+-0.00367147
release with debug info
Average time taken: 0.091748+-0.00464114 seconds
min size release
Average time taken: 0.0943458+-0.00495204 seconds
default
Average time taken: 1.04789+-0.046057 seconds
链接选项
1 | build test.exe: CXX_EXECUTABLE_LINKER__test_Release CMakeFiles\test.dir\main.cpp.obj |
1 | build test.exe: CXX_EXECUTABLE_LINKER__test_Debug CMakeFiles\test.dir\main.cpp.obj |
mingw gcc13.1
debug
Average time taken: 0.717199+-0.0281037 seconds
Compiler: GCC 13.1.0
release
Average time taken: 0.047984+-0.00180785 seconds
Compiler: GCC 13.1.0
mingw gcc14.1
debug
Average time taken: 0.632808+-0.0189124 seconds
Compiler: GCC 14.1.0
release
Average time taken: 0.0469553+-0.00102693 seconds
Compiler: GCC 14.1.0
clang18.5
debug
Average time taken: 0.578604+-0.015456 seconds
Compiler: Clang 18.1.5
release
Average time taken: 0.0460767+-0.00232557 seconds
Compiler: Clang 18.1.5
mingwqt730
debug
Average time taken: 0.608789+-0.0119655 seconds
Compiler: GCC 7.3.0
release
Average time taken: 0.0576486+-0.00162774 seconds
Compiler: GCC 7.3.0
mingw gcc 14.1手动编译
默认
1 | g++ main.cpp -o test.exe |
Average time taken: 0.624644+-0.0108304 seconds
Compiler: GCC 14.1.0
1 | g++ -O0 main.cpp -o test.exe |
Average time taken: 0.629093+-0.0114114 seconds
Compiler: GCC 14.1.0
1 | g++ -O1 main.cpp -o test.exe |
Average time taken: 0.0804241+-0.00115119 seconds
Compiler: GCC 14.1.0
1 | g++ -O2 main.cpp -o test.exe |
Average time taken: 0.0473159+-0.0018409 seconds
Compiler: GCC 14.1.0
1 | g++ -O3 main.cpp -o test.exe |
Average time taken: 0.0456077+-0.000531312 seconds
Compiler: GCC 14.1.0
加入调试信息
1 | g++ -O2 -g main.cpp -o test.exe |
Average time taken: 0.0464482+-0.00176307 seconds
Compiler: GCC 14.1.0
虚拟机-r9000p-ubuntu24
默认
Average time taken: 0.670076+-0.0136274 seconds
Compiler: GCC 13.2.0
-O1
Average time taken: 0.0970865+-0.00210742 seconds
Compiler: GCC 13.2.0
-O2
Average time taken: 0.0552798+-0.00120039 seconds
Compiler: GCC 13.2.0
-O3
Average time taken: 0.0552372+-0.000582813 seconds
Compiler: GCC 13.2.0
虚拟机-r9000p-centos7
默认
1 | g++ main.cpp -o test -std=c++11 |
Average time taken: 0.673767+-0.0126313 seconds
Compiler: GCC 4.8.5 20150623 (Red Hat 4.8.5-44)
1 | g++ -O0 main.cpp -o test -std=c++11 |
Average time taken: 0.665408+-0.0191855 seconds
Compiler: GCC 4.8.5 20150623 (Red Hat 4.8.5-44)
1 | g++ -O1 main.cpp -o test -std=c++11 |
Average time taken: 0.0948795+-0.00221561 seconds
Compiler: GCC 4.8.5 20150623 (Red Hat 4.8.5-44)
1 | g++ -O2 main.cpp -o test -std=c++11 |
Average time taken: 0.0525293+-0.00172819 seconds
Compiler: GCC 4.8.5 20150623 (Red Hat 4.8.5-44)
1 | g++ -O3 main.cpp -o test -std=c++11 |
Average time taken: 0.0547469+-0.00279207 seconds
Compiler: GCC 4.8.5 20150623 (Red Hat 4.8.5-44)
mac m3pro
debug
Average time taken: 0.294708+-0.00591219 seconds
Compiler: Clang 15.0.0 (clang-1500.3.9.4)
release
Average time taken: 0.0505498+-0.00216094 seconds
Compiler: Clang 15.0.0 (clang-1500.3.9.4)