string是一种变长的字符串存储结构,使用时会预创建一定大小的空间.当空间不足时,系统自动为string对象扩容,会有固定扩容步长(很多机器人是16),比如一般机器string默认是 string.size() == 15 ; 当string = "一个超过15长度的字符串",则自动扩充到31(n*16 -1),或者更大的-31-47-63等等.也就是说string的存储空间是不断变化的.而且默认情况下是只增不减.
于是就有了问题中的情况,如果一个string总是变化,而且长度不固定,那么使用一段时间后,这个string的占用空间将是这个string峰值使用空间,而且不会减少,浪费产生了.
解决方法:
string.reserve(int)方法可以重置string的占用空间,可以通过调用这个方法来控制string的占用空间,避免不要的浪费.
注:
1.string.reserve(int nSize )中nSize需要保证要能足够容纳string中的字符,否则此方法无效(但不会导致崩溃).
2.string.reserve(int nSize )设置完毕后自动将string的占用空间对齐到整数步长.
比如20会对齐到2*16-1 = 31
3.不要轻易使用这个函数,string的扩容和缩容都是很占用CPU的操作,对效率有影响.
附录:string几个常用的长度容量方法
1. string.size() 返回string中内容的长度
2. string.capacity() 返回string所占用的内存空间,必定大于size()
3. string.empty() 判断是否为空,此函数的效率要高于 string.size()==0 操作
4. string.reserve(int nSize) 重新设定字符串的内存空间,nSize大于size时才生效.
5. string.max_size() 返回string的最大长度.跟操作系统适应,数值很大,用处不大啦
共2条
1/1 1 跳转至页
关于sring中的reserve()问题

共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 |