【发布时间】:2016-09-06 09:23:36
【问题描述】:
(我使用的是启用 LTO 的 GCC 5.3.0)
我有三个类方法:
void method1(){
.
method2();
.
}
void method2(){
.
method3();
.
}
void method3(){...}
并且这些方法被安排以最大化缓存空间局部性。
我现在模板 method2() 并且有两种可能的模板类型,生成两个版本的method2()。
method2() 的代码/指令是否仍会与 method1() 和 method3() 连续(如下所示),还是在其他地方分配模板化方法?
void method1(){
.
method2();
.
}
template<typename T1>
void method2(){
.
method3();
.
}
template<typename T2>
void method2(){
.
method3();
.
}
void method3(){...}
我仍然希望将两个模板化的method2()s 分配给method1() 和method3()。
【问题讨论】:
-
是什么让您认为编译器按照您编写代码的确切顺序放置指令?更糟糕的是,一旦优化器完成了您的代码(想想内联),您的原始订单就没有多少了。编译器会把热代码放在一起,声明的顺序没有意义。
标签: c++ performance gcc optimization compilation