Я только начал использовать бенчмарк Google для микробенчмаркинга и получил результаты, которые не могу объяснить.У меня есть функция URLify (основные функции, которые кодируют пробелы).Я конвертирую свою строку в char * и передаю ее функции
. Вот так я тестирую ее с помощью бенчмарка Google и полной оптимизации.с использованием VS 2015 x64
while (state.KeepRunning()) {
char* ch = new char[str.length()*2 ]; //str is a string I want to encode
memcpy(ch, &str[0], str.length() + 1);
URLify(ch, str.length());
delete[] ch;
}
это результат 30000 итераций и 5 повторений
BenchURLify/iterations:30000/repeats:5 5370 ns 5729 ns 30000
BenchURLify/iterations:30000/repeats:5 5366 ns 5208 ns 30000
BenchURLify/iterations:30000/repeats:5 5349 ns 5208 ns 30000
BenchURLify/iterations:30000/repeats:5 5364 ns 5729 ns 30000
BenchURLify/iterations:30000/repeats:5 5356 ns 5208 ns 30000
BenchURLify/iterations:30000/repeats:5_mean 5361 ns 5417 ns 5
BenchURLify/iterations:30000/repeats:5_median 5364 ns 5208 ns 5
BenchURLify/iterations:30000/repeats:5_stddev 8.48 ns 285 ns 5
Но когда я удалил delete [] из кода, бенчмарк Google показал другой результат, а нерезультат я ожидал.Я думал, что освобождение памяти на каждой итерации будет медленнее, чем утечка памяти.Но это результаты без удаления [] ch
BenchURLify/iterations:30000/repeats:5 7240 ns 7292 ns 30000
BenchURLify/iterations:30000/repeats:5 7245 ns 7292 ns 30000
BenchURLify/iterations:30000/repeats:5 7116 ns 7292 ns 30000
BenchURLify/iterations:30000/repeats:5 7091 ns 7292 ns 30000
BenchURLify/iterations:30000/repeats:5 7116 ns 6771 ns 30000
BenchURLify/iterations:30000/repeats:5_mean 7162 ns 7188 ns 5
BenchURLify/iterations:30000/repeats:5_median 7116 ns 7292 ns 5
BenchURLify/iterations:30000/repeats:5_stddev 74.6 ns 233 ns 5
Итак, мой вопрос: почему удаление [] показывает лучшую производительность, чем утечка памяти?или что мне здесь не хватает