当前位置: 首页 > news >正文

【C++】如何让C++字符串更快、C++的小字符串优化

二十三、如何让C++字符串更快、C++的小字符串优化

1、如何让C++字符串更快?
如果程序中有很多字符串操作,比如格式化文本(日志记录),那是非常糟糕的,因为字符串操作是很慢的。字符串string和它相关的很多函数很可能会自动分配内存:



说明:重载new操作符,返回malloc(size),这是基本的内存分配。
从上面例子中可以看出只要构造string字符串,就会自动进行内存分配;string操作也会动态分配内存。而这都会降低程序速度。

解决方案1:std::string_view
std::string_view是C++17中的一个新类,它的本质是指向现有内存的指针,或者说就是一个const char指针,指向别人拥有的字符串,再加上一个大小size。也就是我创建了一个窗口,一个进入现有内存的小视图,而不是分配一个新的字符串。在C++17之前,人们就是这样做的,不是去创建一个自己的字符串,而是观察一个已有的字符串。这样就没有内存分配,按值传递字符串视图是非常轻量级的,因为它只有一个指针和一个大小。下面我们重写一下substr和func函数:

解决方案2:完全不使用std::string
因为上面例子中的字符串是一个静态字符串,没有理由非得用std::string啊,用原始的const char*也很香啊:

解决方案3:最终代码
上面的优化是基于静态字符串的,如果这些字符串数据不仅仅是C++代码的静态类型,比如可能来自一个文件或以某种方式生成的,在这种情况下,我们还是得使用std::string字符串的,所以我们一般会写func函数的两个版本,一个不使用std::string_view版本,一个使用视图:

很多情况下,代码慢的大部分原因就是字符串操作造成的,我们要尽量避免字符串毫无意义的复制。

2、C++的小字符串优化

待续。。。

http://www.lryc.cn/news/476136.html

相关文章:

  • C++《list》
  • strongswan中METHOD定义
  • Rive 动画框架竟然支持响应式布局,全平台动画框架开启全新 UI 交互能力
  • MQ的详细大全知识点
  • AI图像相似性搜索对比:VIT, CLIP, DINO-v2, BLIP-2
  • 【tomcat系列漏洞利用】
  • 前端学习-盒子模型(十八)
  • 【C++】类和对象(十二):实现日期类
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《提升系统频率支撑能力的“车-氢”柔性可控负荷协同构网控制》
  • 异或的性质
  • 新一代Webshell管理器
  • 「iOS」——知乎日报一二周总结
  • windows C#-匿名类型
  • CryptoHack 简介
  • transformControls THREE.Object3D.add: object not an instance of THREE.Object3D.
  • 游戏开发与游戏运营:哪个更难?
  • 大模型在自动化渗透测试中的应用
  • 《AI在企业战略中的关键地位:以微软和阿里为例》
  • C语言 | Leetcode C语言题解之第537题复数乘法
  • Vue如何实现数据的双向绑定和局部更新?
  • java学习1
  • 如何缩小PPT演示文稿的大小?
  • 闯关leetcode——234. Palindrome Linked List
  • 通过源码分析类加载器里面可以加载的类
  • RSA算法:数字安全的基石
  • DPDK高性能处理框架VPP
  • Spring工厂方式实现实例化bean有哪些方式?
  • 衡石分析平台系统分析人员手册-指标分析看板
  • 《C++17 结构化绑定:解锁不同类型处理的秘籍》
  • 大型音频模型:AudioLLMs