From 7c7675b9d6605fee3d536c1b3a3396a040f033e2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 4 Jan 2026 04:58:56 +0000 Subject: [PATCH] chore: add struct array traversal benchmark Co-authored-by: blueloveTH <28104173+blueloveTH@users.noreply.github.com> --- benchmarks/struct_array_traverse | Bin 0 -> 16184 bytes benchmarks/struct_array_traverse.c | 53 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100755 benchmarks/struct_array_traverse create mode 100644 benchmarks/struct_array_traverse.c diff --git a/benchmarks/struct_array_traverse b/benchmarks/struct_array_traverse new file mode 100755 index 0000000000000000000000000000000000000000..7716aa634e6991939a4eaec392a3f4665357b90b GIT binary patch literal 16184 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 W>t);dv-p3RzSuzYeq$w@DE +#include +#include + +static inline uint64_t nanos(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t)ts.tv_sec * 1000000000ull + (uint64_t)ts.tv_nsec; +} + +static uint64_t bench_int(void) { + int arr[1000]; + for (int i = 0; i < 1000; ++i) arr[i] = 1; + + volatile long long total = 0; + uint64_t start = nanos(); + for (int round = 0; round < 1000; ++round) { + long long sum = 0; + for (int i = 0; i < 1000; ++i) sum += arr[i]; + total += sum; + } + uint64_t end = nanos(); + // prevent optimization + if (total == 0) printf("unused: %lld\n", total); + return (end - start) / 1000; +} + +static uint64_t bench_char(void) { + char arr[1000]; + for (int i = 0; i < 1000; ++i) arr[i] = 1; + + volatile long long total = 0; + uint64_t start = nanos(); + for (int round = 0; round < 1000; ++round) { + long long sum = 0; + for (int i = 0; i < 1000; ++i) sum += arr[i]; + total += sum; + } + uint64_t end = nanos(); + if (total == 0) printf("unused: %lld\n", total); + return (end - start) / 1000; +} + +int main(void) { + uint64_t int_avg = bench_int(); + uint64_t char_avg = bench_char(); + printf("int[1000] average traversal (ns): %llu\n", + (unsigned long long)int_avg); + printf("char[1000] average traversal (ns): %llu\n", + (unsigned long long)char_avg); + return 0; +}