При сравнении 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);
Как и ожидалось, разница также в том, где char делает строку неравной. Когда он посередине, результат противоположен (но разница все еще такая маленькая). Какой крайний случай, когда diff может быть самым большим?