为什么 g++ 用 -std=c++11 编译 <algorithm> 需要更长的时间?
Why does g++ take much longer to compile <algorithm> with -std=c++11?
g++ 版本为 5.3.0.
#include <algorithm>
int main() {
return 0;
}
测试$时间g++ test.cpp
real 0m0.203s
user 0m0.073s
sys 0m0.031s
测试$时间g++ test.cpp --std=c++11
real 0m0.761s
user 0m0.554s
sys 0m0.130s
多次尝试的结果相似。包含向量 header 时只有轻微的减速(0.03 秒)。
直接的答案是显然还有更多需要编译的内容。使用 -Q -ftime-report
GCC 将打印出配置文件统计信息。请记住,左侧的部分不可靠,因为每次您 运行 命令时它都会更改,但总计始终是一致的。对于 C++03 和 C++11 分别为:
Execution times (seconds)
phase setup : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 1189 kB (16%) ggc
phase parsing : 0.03 (100%) usr 0.02 (100%) sys 0.06 (100%) wall 6301 kB (83%) ggc
preprocessing : 0.01 (33%) usr 0.01 (50%) sys 0.04 (67%) wall 488 kB ( 6%) ggc
parser (global) : 0.00 ( 0%) usr 0.01 (50%) sys 0.00 ( 0%) wall 3626 kB (48%) ggc
parser struct body : 0.02 (67%) usr 0.00 ( 0%) sys 0.01 (17%) wall 778 kB (10%) ggc
parser function body : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (17%) wall 436 kB ( 6%) ggc
TOTAL : 0.03 0.02 0.06 7558 kB
Execution times (seconds)
phase setup : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 1384 kB (11%) ggc
phase parsing : 0.05 (100%) usr 0.03 (100%) sys 0.10 (100%) wall 10953 kB (88%) ggc
|name lookup : 0.00 ( 0%) usr 0.01 (33%) sys 0.01 (10%) wall 1301 kB (10%) ggc
preprocessing : 0.01 (20%) usr 0.00 ( 0%) sys 0.03 (30%) wall 878 kB ( 7%) ggc
parser (global) : 0.01 (20%) usr 0.01 (33%) sys 0.01 (10%) wall 4592 kB (37%) ggc
parser struct body : 0.02 (40%) usr 0.00 ( 0%) sys 0.01 (10%) wall 2837 kB (23%) ggc
parser function body : 0.01 (20%) usr 0.01 (33%) sys 0.01 (10%) wall 478 kB ( 4%) ggc
parser inl. meth. body : 0.00 ( 0%) usr 0.01 (33%) sys 0.03 (30%) wall 937 kB ( 8%) ggc
symout : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (10%) wall 0 kB ( 0%) ggc
TOTAL : 0.05 0.03 0.10 12490 kB
这是 12490 - 7558 = 4942 KB
的区别,区别不大。现在至于为什么 GCC 5.3.0
中存在如此大的差异,这是一个 QoI 问题,可能已在以后的版本中修复。
g++ 版本为 5.3.0.
#include <algorithm>
int main() {
return 0;
}
测试$时间g++ test.cpp
real 0m0.203s
user 0m0.073s
sys 0m0.031s
测试$时间g++ test.cpp --std=c++11
real 0m0.761s
user 0m0.554s
sys 0m0.130s
多次尝试的结果相似。包含向量 header 时只有轻微的减速(0.03 秒)。
直接的答案是显然还有更多需要编译的内容。使用 -Q -ftime-report
GCC 将打印出配置文件统计信息。请记住,左侧的部分不可靠,因为每次您 运行 命令时它都会更改,但总计始终是一致的。对于 C++03 和 C++11 分别为:
Execution times (seconds)
phase setup : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 1189 kB (16%) ggc
phase parsing : 0.03 (100%) usr 0.02 (100%) sys 0.06 (100%) wall 6301 kB (83%) ggc
preprocessing : 0.01 (33%) usr 0.01 (50%) sys 0.04 (67%) wall 488 kB ( 6%) ggc
parser (global) : 0.00 ( 0%) usr 0.01 (50%) sys 0.00 ( 0%) wall 3626 kB (48%) ggc
parser struct body : 0.02 (67%) usr 0.00 ( 0%) sys 0.01 (17%) wall 778 kB (10%) ggc
parser function body : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (17%) wall 436 kB ( 6%) ggc
TOTAL : 0.03 0.02 0.06 7558 kB
Execution times (seconds)
phase setup : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 1384 kB (11%) ggc
phase parsing : 0.05 (100%) usr 0.03 (100%) sys 0.10 (100%) wall 10953 kB (88%) ggc
|name lookup : 0.00 ( 0%) usr 0.01 (33%) sys 0.01 (10%) wall 1301 kB (10%) ggc
preprocessing : 0.01 (20%) usr 0.00 ( 0%) sys 0.03 (30%) wall 878 kB ( 7%) ggc
parser (global) : 0.01 (20%) usr 0.01 (33%) sys 0.01 (10%) wall 4592 kB (37%) ggc
parser struct body : 0.02 (40%) usr 0.00 ( 0%) sys 0.01 (10%) wall 2837 kB (23%) ggc
parser function body : 0.01 (20%) usr 0.01 (33%) sys 0.01 (10%) wall 478 kB ( 4%) ggc
parser inl. meth. body : 0.00 ( 0%) usr 0.01 (33%) sys 0.03 (30%) wall 937 kB ( 8%) ggc
symout : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 (10%) wall 0 kB ( 0%) ggc
TOTAL : 0.05 0.03 0.10 12490 kB
这是 12490 - 7558 = 4942 KB
的区别,区别不大。现在至于为什么 GCC 5.3.0
中存在如此大的差异,这是一个 QoI 问题,可能已在以后的版本中修复。