局部变量与指针性能
local variable vs pointer performance
对于下面的代码示例,指针-num_ptr执行方法"increment"的速度明显慢于局部变量-num。我认为这与虚拟方法有关,但我不明白为什么。请帮忙解释一下。我正试图从这个例子中理解性能问题。
#include <iostream>
const long long iterations_count = 1000000;
// a number interface
struct number {
virtual void increment() = 0;
};
struct concrete_number:number
{
long long a;
concrete_number(long long p){
a = p;
}
void increment()
{
a+=1;
}
};
int main() {
concrete_number num(0);
concrete_number* num_ptr = #
for (long long i = 0; i < iterations_count; i++) {
num.increment();
}
for (long long i = 0; i < iterations_count; i++) {
num_ptr->increment();
}
std::getchar();
}
num.increment();
静态解析,num_ptr->increment();
动态解析(函数是通过动态调度调用的,因为它是virtual
)。
但是,在完全优化的情况下,编译器应该会产生类似的结果。
无选择:
num.increment();
00341453 lea ecx,[num]
00341456 call concrete_number::increment (341186h)
与
num_ptr->increment();
00341490 mov eax,dword ptr [num_ptr]
00341493 mov edx,dword ptr [eax]
00341495 mov esi,esp
00341497 mov ecx,dword ptr [num_ptr]
0034149A mov eax,dword ptr [edx]
0034149C call eax
0034149E cmp esi,esp
003414A0 call @ILT+340(__RTC_CheckEsp) (341159h)
通过优化,至少对我来说,这两个调用都是内联的。
相关文章:
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 避免使用指针时C++的性能和安全性
- C++ 将函数指针与最佳性能相结合
- 指针和程序性能之间有什么关系吗?
- 指针保护和性能
- 性能:指针在C++中取消引用
- 在类中始终使用此指针是否有任何性能成本
- C 指针向量如何影响性能
- 比较 C/C++ 中指针分配的性能
- C++ 双指针的库达性能
- 通过简单的包装指针C++智能指针性能和差异
- 这个指针和性能惩罚
- 我们是否应该将指向类实例的智能指针存储在大型 std::vector 中以获得更好的性能?
- 局部变量与指针性能
- 对象容器的性能与指针容器的性能
- 指针向量与值向量 大内存块与小内存块的性能损失
- 为什么预分配的函数指针的性能比分支差
- static_cast指针类型的性能命中率
- "non-native"指针会损害缓存性能吗?
- 在C++中使用指针列表(继承还是性能?