如何在C ++代码中理解这些符号?

时间:2019-03-30 10:35:23

标签: c++ microbenchmark google-benchmark

  1. 为什么将posix_memalign写为::posix_memalign
  2. 这里的memory是什么?

我正在寻找基准测试我的缓存和RAM的读写速度。为此,我想使用Google基准测试库,并看到了一个利用它的示例代码。我或多或少都对代码有所了解,但是memory在这里代表什么?为什么我们将其作为指向无效的指针?另外,为什么该示例将posix_memalign写入::?是因为我们引用了Google基准测试类吗?

#include <cstddef>
#include <cstdlib>
#include <string.h>
#include <emmintrin.h>
#include <immintrin.h>

#include "benchmark/benchmark.h"

#define ARGS \
  ->RangeMultiplier(2)->Range(1024, 2*1024*1024) \
  ->UseRealTime()

template <class Word>
void BM_write_seq(benchmark::State& state) {
  void* memory; 
  if (::posix_memalign(&memory, 64, state.range_x()) != 0) return;
  void* const end = static_cast<char*>(memory) + state.range_x();
  Word* const p0 = static_cast<Word*>(memory);
  Word* const p1 = static_cast<Word*>(end);
  Word fill; ::memset(&fill, 0xab, sizeof(fill));
  while (state.KeepRunning()) {
    for (Word* p = p0; p < p1; ++p) {
      benchmark::DoNotOptimize(*p = fill);
    }
  }
  ::free(memory);
}

1 个答案:

答案 0 :(得分:1)

  

为什么posix_memalign写为:: posix_memalign

::左边没有名称空间的是指全局名称空间

  

为什么

可能您在一个名称空间中,并且需要一个全局名称空间中的函数。我无法从摘要中分辨出来

  

这里的记忆是什么?

在:: posix_memalign中分配并在:: free(memory)中释放的原始指针;

  

为什么我们将其作为指向void的指针?

因为它只是没有类型的原始内存,所以它适合原始指针。 普通的旧C风格。