性能优化篇

1、使用 Class 代替 ProtoBuf 协议

因为 ProtoBuf 采用的是 Arena 内存分配器策略,有些场景会比 C++的 Class 内存管理复杂,当有大量内存分配和释放的时候会比 Class 的性能差很多。而且 Protobuf 会不断分配和回收小内存对象,持续地分配和删除小内存对象导致产生内存碎片,降低程序的内存使用率,尤其是当协议中包含 string 类型的时候,性能差距可能有几倍。对于包含了很多小对象的 Protobuf message,析构过程会导致堆上分配了许多对象,从而会变得复杂,导致析构函数执行速度变慢。

https://www.cnblogs.com/papering/p/18058309

2、使用 jemalloc/tcmalloc 代替普通的 malloc 方式

使用 C++的 STL(malloc),所以会出现以下几种缺点:

内存碎片:频繁分配和释放不同大小的对象,可能导致内存碎片,降低内存的使用效率。Cache 不友好:而且 STL 的普通内存分配器分散了对象的内存地址,降低了数据的缓存命中率。并发差:STL 的默认内存分配器可能使用全局锁,相当于给加了一把大锁,在多线程环境下性能表现很差。

https://www.cnblogs.com/papering/p/18058309

相关推荐
程序喵大人1 天前
SQLITE问题整理
开发语言·数据库·c++·sqlite
天赐学c语言1 天前
12.17 - 合并两个有序数组 && include<> 和 include““ 的区别
c++·算法·leecode
珹洺1 天前
C++从入门到实战(二十二)stack的介绍和使用
开发语言·c++
郝学胜-神的一滴1 天前
Linux下创建线程:从入门到实践
linux·服务器·开发语言·c++·程序人生·软件工程
FFZero11 天前
C++ 内存模型与Memory Order深度解析
c++
leiming61 天前
C++ 01 函数模板
开发语言·c++·算法
Chen--Xing1 天前
LeetCode LCR 119.最长连续序列
c++·python·算法·leetcode·rust
xiaoye-duck1 天前
吃透C++类和对象(上):封装、实例化与 this 指针详解
c++
李余博睿(新疆)1 天前
c++经典练习题-分支练习(1)
数据结构·c++·算法