最近我正在尝试做一些性能基准测试,比较std::stack<int, std::vector<int>>和我自己的堆栈的简单实现(使用预先分配的内存)。现在我遇到了一些奇怪的行为。
我想问的第一件事是堆栈基准代码中的这一行:
// std::vector<int> magicVector(10);
Run Code Online (Sandbox Code Playgroud)
当我取消注释这条线时,性能提高了大约 17%(基准时间从 6.5 秒下降到 5.4 秒)。但是该行应该对程序的其余部分没有影响,因为它不会修改任何其他成员。此外,它是int的向量还是double的向量都没有关系......
我想问的第二件事是我的堆栈实现和std::stack. 有人告诉我这std::stack应该和我的堆栈一样快,但结果显示我的“FastStack”是两倍快。
结果(未注释的性能提升线):
stack 5.38979
stack 5.34406
stack 5.32404
stack 5.30519
FastStack 2.59635
FastStack 2.59204
FastStack 2.59713
FastStack 2.64814
这些结果来自 VS2010 的发布版本,带有 /O2、/Ot、/Ob2 和其他默认优化。我的 CPU 是 Intel i5 3570k,具有默认时钟(一个线程为 3.6 GHz)。
我将所有代码放在一个文件中,以便任何人都可以轻松测试它。
#define _SECURE_SCL 0
#include <iostream>
#include <vector>
#include <stack>
#include <Windows.h>
using namespace std;
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
// Purpose: High Resolution Timer
//---------------------------------------------------------------------------------
class HRTimer
{
public:
HRTimer(); …Run Code Online (Sandbox Code Playgroud)