2.4 constexpr 与编译期计算

代码语言:javascript

AI代码解释

cpp复制编辑constexpr int square(int x) {
    return x * x;
}

int arr[square(5)];  // 合法,数组大小在编译期确定

减少运行期开销,提升效率。


2.5 move 语义与右值引用

代码语言:javascript

AI代码解释

cpp复制编辑string a = "hello";
string b = std::move(a);  // a 被清空,资源转移给 b

避免不必要的深拷贝,在 STL 中广泛使用,如 emplace_back()


三、STL 深度优化技巧

3.1 reserve 预分配空间

代码语言:javascript

AI代码解释

cpp复制编辑vector<int> v;
v.reserve(1000);  // 提前分配空间,避免频繁扩容

原因:每次扩容都会触发拷贝/移动构造,影响性能。


3.2 使用 emplace 替代 push

代码语言:javascript

AI代码解释

cpp复制编辑v.emplace_back(1, 2, 3);  // 原地构造,减少拷贝或移动

特别适用于存储自定义类型的容器。


3.3 选择合适的容器
  • 查找频繁:unordered_map > map
  • 插入删除频繁:list > vector
  • 随机访问频繁:vector > list

四、内存管理与性能调优

4.1 避免不必要的拷贝

通过引用传递对象,返回值优化(RVO)等手段减少拷贝开销:

代码语言:javascript

AI代码解释

cpp复制编辑void process(const string& str);     // 传引用
string getName();                    // RVO 优化

4.2 使用内联函数

代码语言:javascript

AI代码解释

cpp复制编辑inline int add(int a, int b) {
    return a + b;
}

减少函数调用开销(需合理使用,防止代码膨胀)。


4.3 减少堆内存分配

在热点路径中,频繁的 new/delete 代价高昂。应尽量使用栈对象或对象池管理。


4.4 编译器优化选项

使用如下编译选项可显著提升运行效率:

代码语言:javascript

AI代码解释

bash复制编辑g++ -O2 main.cpp -o main         # 一般优化
g++ -O3 -march=native -flto ... # 高级优化

五、并发编程简介(C++11 起)

5.1 使用 std::thread

代码语言:javascript

AI代码解释

cpp复制编辑#include <thread>

void task() {
    cout << "Hello from thread" << endl;
}

int main() {
    thread t(task);
    t.join();
}

5.2 std::mutex 实现互斥

代码语言:javascript

AI代码解释

cpp复制编辑mutex m;
void safe_increment() {
    lock_guard<mutex> lock(m);
    // 线程安全操作
}

5.3 std::async 简洁并行

代码语言:javascript

AI代码解释

cpp复制编辑auto result = async([](){ return long_computation(); });
cout << result.get();

六、C++ 性能调试实战工具

工具名

用途

valgrind

检测内存泄漏

gprof

函数级性能分析

perf

Linux 下 CPU 性能分析

clang-tidy

静态代码检查



 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐