网站制作公司全域营销获客公司,地信网站建设,wordpress防cc攻击,wordpress 微站C以高性能著称#xff0c;性能优化是C程序员绕不过去的一个话题#xff0c;性能优化是一个复杂、全局而又细节的问题#xff0c;本文总结C性能分析中常用的知识。
性能优化的时机
大部分关于性能优化的文章都强调#xff1a;不要过早的进行性能优化。
C编码层面
数据结…C以高性能著称性能优化是C程序员绕不过去的一个话题性能优化是一个复杂、全局而又细节的问题本文总结C性能分析中常用的知识。
性能优化的时机
大部分关于性能优化的文章都强调不要过早的进行性能优化。
C编码层面
数据结构和算法
选择最优的数据结构和算法是保证程序性能的基础。
为了极致的性能有时候还需要根据实际业务定义自己的数据结构和算法。
避免不必要的复制
内联函数
常量表达式
使用 constexpr 使得表达式在编译时计算。
constexpr int square(int x) { return x * x; }int main() {int result square(5); // 编译时计算return 0;
}
避免不必要的类型转换
避免频繁的类型转换特别是尽量避免使用 dynamic_cast尤其是在性能关键路径中。
class Base { public: virtual void doSomething() {} };
class Derived : public Base { public: void doSomething() override {} };int main() {Base* base new Derived();Derived* derived static_castDerived*(base); // 使用 static_cast 避免动态类型转换derived-doSomething();delete base;return 0;
}
使用移动优化
……
硬件层面
内存管理
频繁的内存分配和释放导致性能下降使用内存池来预分配一块大内存区域避免多次分配和释放内存。
#include vectorclass MemoryPool {
public:
void* allocate(size_t size) {}void deallocate(void* ptr) {}private:
std::vectorvoid* freeList;
};
优化常用操作
条件分支导致 CPU 分支预测失败可以优化代码中条件分支的顺序避免分支预测失败。
for (int i 0; i 1000; i) {if (i % 2 0) {// 一部分代码高频的部分可以放在前面} else {// 另一部分代码}
}编译器优化
充分相信编译器是聪明到了极致而不是自作聪明的去揣测编译器
并性编程
多线程 并行执行任务充分利用多核 CPU。 CPU缓存优化
数据访问顺序导致缓存未命中影响性能调整内存访问顺序增加数据的局部性。如下为经典示例
const int SIZE 10000;
int arr[SIZE][SIZE];// 访问顺序优化按列访问时可能导致缓存未命中
for (int j 0; j SIZE; j) {for (int i 0; i SIZE; i) {arr[i][j] i * j;}
}// 更好的访问顺序按行访问
for (int i 0; i SIZE; i) {for (int j 0; j SIZE; j) {arr[i][j] i * j;}
}
I/O 性能 性能分析工具
Visual Studio性能探测器
gprof 进行性能分析
VTune工具