我如何理解 C++ 代码中的这些符号?
How can I understand these symbols in a C++ code?
- 为什么
posix_memalign
写成::posix_memalign
?
- 这里的
memory
是什么?
我希望对高速缓存和 RAM 的读写速度进行基准测试。为此,我想使用 google 基准库,我看到了一个使用它的示例代码。或多或少我明白了代码的意思,但是 memory
站在这里是什么意思?为什么我们将它作为指向 void 的指针?另外,为什么这个例子写 posix_memalign
和 ::
?是因为我们参考了 google 基准 class 吗?
#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);
}
Why the posix_memalign is written as ::posix_memalign
::左边不带命名空间指的是全局命名空间
Why
可能您在命名空间内,并且需要全局命名空间中的函数。我无法从片段中分辨出来
What is memory here?
在 ::posix_memalign 中分配并在 ::free(memory) 中释放的原始指针;
And why are we making it as a pointer to void?
因为它只是没有类型的原始内存,所以它适合原始指针。
普通的旧 C 风格。
- 为什么
posix_memalign
写成::posix_memalign
? - 这里的
memory
是什么?
我希望对高速缓存和 RAM 的读写速度进行基准测试。为此,我想使用 google 基准库,我看到了一个使用它的示例代码。或多或少我明白了代码的意思,但是 memory
站在这里是什么意思?为什么我们将它作为指向 void 的指针?另外,为什么这个例子写 posix_memalign
和 ::
?是因为我们参考了 google 基准 class 吗?
#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);
}
Why the posix_memalign is written as ::posix_memalign
::左边不带命名空间指的是全局命名空间
Why
可能您在命名空间内,并且需要全局命名空间中的函数。我无法从片段中分辨出来
What is memory here?
在 ::posix_memalign 中分配并在 ::free(memory) 中释放的原始指针;
And why are we making it as a pointer to void?
因为它只是没有类型的原始内存,所以它适合原始指针。 普通的旧 C 风格。