谷歌基准测试,如何只调用一次代码?
Google Benchmark, how to call code only once?
我有一个代码片段,我需要对由两部分组成的基准测试,首先需要精确设置一次状态,接下来我需要实际对函数进行基准测试。
我的代码如下所示:
static void BM_LoopTime(benchmark::State& state)
{
MasterEngine engine;
for (auto _ : state)
{
engine.LoopOnce();
}
}
BENCHMARK(BM_LoopTime);
在我的输出中,我得到:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Pointer already set
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
多次,这是一个自定义错误消息,指示一个非常重要的指针,应该只触摸一次,正在尝试被覆盖。
在我的实现中,多次调用该代码是未定义的行为。如何精确地调用对象初始化一次,然后告诉它调用循环?
这是一个变通方法,我发现它对我的用例来说已经足够了,但我仍在寻找更好的解决方案:
class MyFixture : public benchmark::Fixture
{
public:
std::unique_ptr<MasterEngine> engine;
void SetUp(const ::benchmark::State& state)
{
if(engine.get() == nullptr)
engine = std::make_unique<MasterEngine>();
}
void TearDown(const ::benchmark::State& state)
{
}
};
相关文章:
- 谷歌基准测试,如何只调用一次代码?
- 代码执行/CPU 速度每 2 秒减慢一次
- 代码只输出一次 std::vector,而不是多次输出
- 我如何使一行代码可以选择,但在已经选择过一次后不重新选择
- 循环在此代码中仅迭代一次,而在另一个代码中正确迭代
- Qt C++每秒运行一次代码
- 如何将.txt文件中的多维数组放入代码中,并一次打印一行
- 代码无限循环不能只打印一次
- 限制C++更新速率.为什么此代码每秒更新一次,而不是每秒更新 60 次
- 每 t 毫秒执行一次 c++ 代码
- C++ SQLite 查询只工作一次。我的代码有什么问题?
- 对于多少种类型的 x86 处理器,Ngen 和 .net 本机一次创建本机代码
- 从第二次调用开始在函数中执行一段代码
- 如何在没有外部标志的情况下只在循环中运行一次代码
- 如何在ubuntu中创建和运行一个脚本,该脚本每5分钟运行一次并关闭一个c代码
- 在没有默认构造函数的OpenMP中,每个线程执行一次代码
- 如何只执行一段代码一次
- 代码是打印相同的值时,它应该随机生成每一次,而且它不打印数组中的第一个值
- 在精确的时间运行代码,每小时运行一次
- 每X秒执行一次代码,但在事件发生时立即中断