Skip to content

Commit

Permalink
Fix primitives benchmark code
Browse files Browse the repository at this point in the history
Pointer variable is used after releasing the memory with free().
This is a bug and should be fixed.

Without this fix, the benchmark code may not build or run correctly.
  error: pointer used after 'void free(void*)' [-Werror=use-after-free]

This commit fixes the issue by releasing the memory after
benchmark::DoNotOptimize() is called.
  • Loading branch information
gigony committed Jan 15, 2025
1 parent b197623 commit eca7c7d
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions benchmarks/primitives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,10 @@ static void string_memcpy(benchmark::State& state)
char * c_str = (char*) malloc(size + 1);
memcpy(c_str, data.data(), size);
c_str[size] = '\0';
free(c_str);
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(c_str);
benchmark::DoNotOptimize(size);
free(c_str);
}
}
BENCHMARK(string_memcpy);
Expand All @@ -105,9 +105,9 @@ static void string_strcpy(benchmark::State& state)
std::string data = "#########################################################################################################################################################################################";
char * c_str = (char*) malloc(data.size() + 1);
strcpy(c_str, data.data());
free(c_str);
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(c_str);
free(c_str);
}
}
BENCHMARK(string_strcpy);
Expand All @@ -120,9 +120,9 @@ static void string_strdup(benchmark::State& state)
{
std::string data = "#########################################################################################################################################################################################";
char * c_str = strdup(data.data());
free(c_str);
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(c_str);
free(c_str);
}
}
BENCHMARK(string_strdup);
Expand All @@ -140,12 +140,12 @@ static void alloc_malloc(benchmark::State& state)
arr[i] = (char*)malloc(10);
arr[i][0] = i;
}
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(arr);
for (int i = 0; i < 30000; i++)
{
free(arr[i]);
}
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(arr);
}
}
BENCHMARK(alloc_malloc);//->Iterations(100);
Expand All @@ -163,12 +163,12 @@ static void alloc_pmr(benchmark::State& state)
arr[i] = static_cast<char*>(cucim_malloc(10));
arr[i][0] = i;
}
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(arr);
for (int i = 0; i < 30000; i++)
{
cucim_free(arr[i]);
}
// Make sure the variable is not optimized away by compiler
benchmark::DoNotOptimize(arr);
}
}
BENCHMARK(alloc_pmr);//->Iterations(100);
Expand Down

0 comments on commit eca7c7d

Please sign in to comment.