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