uint32_t vs std :: сравнение строк IpV4 - производительность - PullRequest
1 голос
/ 03 октября 2019

При сравнении ip-адресов я использую предположение, что сравнение строк выполняется намного медленнее, чем сравнение uin32_t. В результате этого мой код иногда был более сложным и менее читаемым. Однако я начал задаваться вопросом, какова реальная разница, и решил сделать быстрый тест. Результат меня удивил. Строка сравнения показывает, что оба метода имеют одинаковую скорость. Теперь я не уверен, что я слишком сильно упростил тест или сделал что-то не так. Если нет, то почему почти нет разницы? Сравнение значений uint32_t и uint32_t x не должно быть равным.

static void IntIpV4Comparation(benchmark::State& state) {
  // Code inside this loop is measured repeatedly
  uint32_t ip1 = 100;
  uint32_t ip2 = 200;
  for (auto _ : state) {
    bool areEqual = ip1 == ip2;
  }
}
// Register the function as a benchmark
BENCHMARK(IntIpV4Comparation);

static void StringIpV4Comparation(benchmark::State& state) {
  // Code before the loop is not measured
  std::string ip1 = "127.0.0.1";
  std::string ip2 = "127.0.0.2";

  for (auto _ : state) {
    bool areEqual = ip1 == ip2;
  }
}
BENCHMARK(StringIpV4Comparation);

enter image description here

Как и ожидалось, разница также в том, где char делает строку неравной. Когда он посередине, результат противоположен (но разница все еще такая маленькая). Какой крайний случай, когда diff может быть самым большим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...