摘要:当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分配时从内存池中分配一块类对象大小的内存,释放时并不实际将内存归还给操作系统,而是交给自定义的内存管理
阅读全文
摘要:前言 近期推动项目屎山代码进行了一波性能优化,实现了较大的性能提升。这里记录了部分近期代码优化的小技巧,这些例子仅从C++语言层面进行优化,主要在于优化类设计、减少隐含函数调用、减少拷贝等,较为基础实用,但涉及的知识点并不少。本文提供了一个视角,可以帮助了解一些C++代码的不同写法性能开销差异。对于
阅读全文
摘要:unordered_map需要哈希值计算和表查询的开销,当key值为整数且连续,直接用数组作为查询表具有更高的效率。 #include <iostream> #include <chrono> #include <unordered_map> using namespace std; long lo
阅读全文
摘要:#include <iostream> #include <vector> #include <chrono> using namespace std; constexpr int N = 10; void timeMeasure(void(*f)()){ auto begin = std::chr
阅读全文
摘要:从代码整洁的角度考虑,对于不同的值将调用相同参数的不同函数,我们通常可以通过建立从值到对应函数指针的哈希表,从而将if else消除。但实际可能使性能更低,以下是测试例子。 原因在于,if else分支预测不正确虽然可能使指令流水线几条指令执行错误,但通过哈希表的方式,增加了计算哈希值、查询哈希表以
阅读全文
摘要:C++性能优化——likely和unlikely分支预测 References C++之likely和unlikely C++ likely-unlikely-directives 一、背景知识:流水线技术 现代CPU为了提高执行指令执行的吞吐量,使用了流水线技术,它将每条指令分解为多步,让不同指令
阅读全文
摘要:C++性能优化 —— __builtin_prefetch()数据预读 References __builtin_prefetch() Prefetching with __builtin_prefetch Data Prefetch 数据预取 数据预读对二分查找的优化 你见过哪些令你瞠目结舌的C/
阅读全文