【发布时间】:2023-04-02 07:50:01
【问题描述】:
我想使用 google benchmark 来运行我的代码,其中包含一个静态全局变量。在基准测试的基类中,我需要读取这个变量来执行一些设置。但是当初始化基准基类时,那个静态变量还没有初始化,会导致问题。
下面的最小复制示例包含三个文件:test.h、test.cc 和 benchmark_main.cc。
benchmark_main.cc 包含基准基类 Init。它的构造函数读取data 变量。但是此时data变量还是空的。
问题:有没有办法让data 变量初始化发生在基类初始化之前?也欢迎任何其他解决方法。
测试.h
#include <array>
#include <vector>
using namespace std;
const vector<int>& func(int);
test.cc
#include "test.h"
const array<vector<int>,5> data = {
vector<int>({1}),
{2,3},
{4,5},
{6,7},
{8}
};
const vector<int>& func(int index) {
return data[index];
}
benchmark_main.cc
#include <benchmark/benchmark.h>
#include <iostream>
#include "test.h"
class Init: public benchmark::Fixture {
protected:
public:
Init() {
std::cout << func(1)[0] << '\n';
}
};
BENCHMARK_F(Init, A)(benchmark::State &state) {
for (auto _ : state)
std::cout << func(1)[0] << '\n';
}
BENCHMARK_MAIN();
【问题讨论】:
-
不要将
using namespace std;放在头文件中。而且它不是静态数据。它位于本地文件的全局命名空间中。
标签: c++ microbenchmark google-benchmark