小字符串优化 in C++【C++学习笔记】

83.小字符串优化 in C++

在编程语言中,字符串的名声比较负面,慢的众所周知(悲),字符串实在是有太多负面影响了,移除字符串后程序的速度显著提升

但是又不能抛开字符串单做事,字符串又是很重要的

但无所谓,今天关注的是:C++标准库中如何优化小字符串

🍅什么是小字符串优化

小字符串(即不是很长的字符串),它们不需要堆分配,可以只分配一小块基于栈的缓冲区而不是堆分配的

小字符串的实际定义长度由使用的C++标准库而变化,如VS2019中,小字符串的长度要小于等于15,即如果有一个这样的小字符串,它就不会在堆上分配内存

💡💡💡而小字符串优化不用特意自己去优化,C++标准库会将小字符串自动栈分配,大字符串堆分配

注意这里会因为环境的不同而有所不同!!!

  • 比如在VS中,在debug模式下,VS还是会将其堆分配。而在release模式下,就不会堆分配了

🍅为何要使用小字符串优化

在C++创建一个标准字符串在某些地方可能会被人念叨几句,因为太慢了(C++的内存分配 + 在堆上分配字符串,debuff叠满)(顺便一说是在std::string上才堆分配,如果用const char*这般C风格的字符串,则会在栈上)

std::string name = "Cherno";
//很多人不喜欢这般使用,这意味着堆分配

const char *name = "Cherno";
//很多人可能会这样做,这意味着这是一个静态字符串,无法修改它

而C++标准库奇妙的注意到了这点,他说:小字符串(即不是很长的字符串),它们不需要堆分配,可以只分配一小块基于栈的缓冲区而不是堆分配的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值