当前位置: 首页 > 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.mrgr.cn/news/65150.html

相关文章:

  • 数据迁移: 安全高效转移数据, 满足企业业务需求和技术改进
  • Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)
  • SpringBoot+Shiro权限管理
  • Docker安装与镜像修改
  • 私有化视频平台EasyCVR视频汇聚平台接入RTMP协议推流为何无法播放?
  • win10/11无休眠设置和断电后电池模式自动休眠而不是睡眠-用以省电
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
  • 「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目
  • Hyper-V 安装 KylinOS V10【图文教程】
  • [SpringStack] 快速登录-9分钟给你站点接入Github登录
  • 华为OD机试 - 第 K 个字母在原来字符串的索引(Java 2024 E卷 100分)
  • grpc 云原生 概念介绍
  • 2024 CSS保姆级教程 - BFC详解
  • PostgreSQL 安装 POSTGRES_FDW
  • pcdn的成本构成(壹)
  • CentOS 7 安装 ntp,自动校准系统时间
  • Python编程风格:使用语义更加明确的方法
  • 数据库基础(1) . 关系型数据库
  • 在 Vision Pro 上打造成功的沉浸式叙述应用:探索极致交互体验
  • VidPanos:从随手拍摄的平移视频生成全景视频
  • mysql报错:Field id doesnt hava a default value
  • 《LoRA-IR》:2024年10月中科院自动所提出了一种用于多种修复图像恶化退化问题的LORA,效果拔群
  • 计算机毕业设计Spark+大模型股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
  • Node.js:ES6 模块化 Promise
  • Intel nuc x15 重装系统步骤和注意事项(LAPKC71F、LAPKC71E、LAPKC51E)
  • XPath 实例