常州网站开发,.net网站开发是什么对象开发,可以用腾讯企业邮箱域名做网站,工作计划及目标测试目的
本次测试旨在比较不同数据结构#xff08;vector、数组#xff09;以及不同访问方法#xff08;[]、at()、offset#xff09;在性能上的差异#xff0c;从而为开发者提供在特定情境下做出最佳选择的依据。
测试代码
测试网址:Quick C Benchmarks
使用GCC9.5 …测试目的
本次测试旨在比较不同数据结构vector、数组以及不同访问方法[]、at()、offset在性能上的差异从而为开发者提供在特定情境下做出最佳选择的依据。
测试代码
测试网址:Quick C Benchmarks
使用GCC9.5 C14 -O2编译
#include benchmark/benchmark.hstatic void vector_access(benchmark::State state) {std::vectorint v;for (int i 0; i 1000; i) {v.push_back(i);}for (auto _ : state) {for (int i 0; i 1000; i) {v[i] 1;}}
}
BENCHMARK(vector_access);static void vector_access_by_at(benchmark::State state) {std::vectorint v;for (int i 0; i 1000; i) {v.push_back(i);}for (auto _ : state) {for (int i 0; i 1000; i) {v.at(i) 1;}}
}
BENCHMARK(vector_access_by_at);static void array_access(benchmark::State state) {int a[1000];for (int i 0; i 1000; i) {a[i] i;}for (auto _ : state) {for (int i 0; i 1000; i) {a[i] 1;}}
}
BENCHMARK(array_access);static void array_access_by_offset(benchmark::State state) {int a[1000];for (int i 0; i 1000; i) {a[i] i;}for (auto _ : state) {for (int i 0; i 1000; i) {*(a i) 1;}}
}
BENCHMARK(array_access_by_offset);static void heap_access(benchmark::State state) {int *a new int[1000];for (int i 0; i 1000; i) {a[i] i;}for (auto _ : state) {for (int i 0; i 1000; i) {a[i] 1;}}delete[] a;
}
BENCHMARK(heap_access);static void heap_access_by_offset(benchmark::State state) {int *a new int[1000];for (int i 0; i 1000; i) {a[i] i;}for (auto _ : state) {for (int i 0; i 1000; i) {*(a i) 1;}}delete[] a;
}
BENCHMARK(heap_access_by_offset);运行结果
Quick C Benchmarks 结论 vector at()方法访问速度最慢 栈上访问最快 其它情况经过O2优化后性能类似。
指导意见 追求最高效的访问速度如果性能是首要考虑因素建议使用栈上数组并采用[]访问方法。 避免使用vector的at()方法在对性能要求较高的场景下应避免使用vector的at()方法转而使用[]访问方法。