Как я могу понять эти символы в коде C++?

  1. Почему posix_memalign написано как ::posix_memalign?
  2. Что такое memory Вот?

Я ищу для сравнения скорости чтения и записи моей кэш-памяти и оперативной памяти. Для этого я хочу использовать библиотеку бенчмарков 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 ответ

Решение

Почему posix_memalign записывается как::posix_memalign

:: без пространства имен слева относится к глобальному пространству имен

Зачем

Возможно, вы находитесь внутри пространства имен и вам нужна функция в глобальном. Я не могу сказать из фрагмента

Что здесь за память?

Необработанный указатель, размещенный в::posix_memalign и освобожденный в::free(memory);

И почему мы делаем это как указатель на пустоту?

Потому что это просто необработанная память без типа, поэтому она подходит для необработанного указателя. Простой старый стиль C.

Другие вопросы по тегам