string 的扩容机制

news/发布时间2024/8/25 19:46:55

C++ string 类的扩容机制主要取决于编译器的实现,但一般来说,它们都遵循一种动态数组的策略,即当字符串的大小超过当前容量时,就会分配更大的内存空间。以下是一种常见的扩容策略1

size_type _Grow_to(size_type _Count) const {size_type _Capacity = capacity();if (_Capacity < 32) {_Capacity = _Capacity + 16;} else {_Capacity = max_size() - _Capacity / 2 < _Capacity ? 0 : _Capacity + _Capacity / 2; // try to grow by 50%}if (_Capacity < _Count)_Capacity = _Count;return (_Capacity);
}

在这个策略中,如果当前容量 _Capacity 小于32,那么新的容量将增加16。如果当前容量大于或等于32,那么新的容量将增加50%,即 _Capacity + _Capacity / 2。然后,如果新的容量仍然小于所需的容量 _Count,那么新的容量将设置为 _Count

这种扩容策略的目的是在需要更多空间时,提供比当前容量大一些的空间,以减少未来可能的内存重新分配的次数,从而提高性能。这是一种权衡,旨在在内存使用效率和性能之间找到平衡。

需要注意的是,不同的编译器可能会有不同的扩容策略。例如,对于 vectorg++ 是2倍扩容,msvc 是1.5倍扩容;对于 string,如果字符串没有超过15个字节,都是分配在栈上,容量都是15;一旦超过了15个字节,则分配在堆上,g++ 的扩容机制是2倍,msvc 的扩容机制是每次+161。这些差异主要取决于编译器的设计者如何权衡内存使用和性能。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.liansuoyi.cn/news/45458636.html

如若内容造成侵权/违法违规/事实不符,请联系连锁易网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Unicode编码解码

一、Unicode概述 Unicode是一种字符编码标准,旨在解决不同字符集之间的兼容性问题。它为全球所有语言提供了一种统一的编码方式,使得各种字符能够在计算机系统中正确显示和处理。Unicode字符集包含了世界上几乎所有的字符,包括中文字符、英文字符、数字、特殊符号等。 Unico…

【项目学习】谷粒商城学习记录5 - 检索服务

【项目学习】谷粒商城学习记录5 - 检索服务1、搭建页面环境search模块添加thymeleaf依赖<!-- thymeleaf --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </depe…

linux安装telnet远程

安装telnet远程 1.RPM安装yum install -y telnet* xinetd2.启动服务// 开启xinetd服务 systemctl restart xinetd // xinetd开机自启 systemctl enable xinetd // 开启telnet.socket服务 systemctl restart telnet.socket //telnet.socket开机自启 systemctl enable telnet.soc…

BLOG-3

前言: 第七次题目集共有四道题目。其中有两道考察HashMap的检索与排序功能,一道考察多态的运用,最重要的一道是成绩计算系统-2。 第八次题目集共有五道题目,考察了ArrayList容器的排序方法、身份证排序方法、自定义接口、覆盖等知识,还有成绩计算系统-3。该系统是成绩计算…

内存可见于内存可用

在GPU执行过程中有责任保证接下来访问的这块内存是保证有效的,也就是确保先前写入的数据对目标单元可见。简单介绍一下GPU Cache体系,平时听得比较多的是CPU Cache,但是GPU同样有着自己的Cache体系。 如下图所示,在这里可以看GPU同样是有着L1/L2 Cache的架构。 那么在GPU中…

CF1842B Tenzing and Books 题解

题意:思路: 或运算的性质:当 $ u $ 某一位的数字变为 $ 1 $ ,这一位永远都不会变为 $ 0 $。 因此,当某个栈的栈顶元素 $ v_i $ 满足 $ v_i | x = x $ 时,取出该栈顶元素 $ v_i $ ,令 $ u = u | v_i $ ;反之,不再从该栈取出元素。 不断重复以上过程,当 $ u = x $ 时,…

Qt6 c++教程2 Qt Creator简介

2 Qt Creator简介 Qt Creator是Qt自带的集成开发环境(IDE),用于跨平台应用程序开发。在本章中,您将学习Qt Creator集成开发环境的基础知识,并了解集成开发环境的用户界面 (UI)。我们还将了解如何在 Qt Creator中创建和管理项目。本Qt 模块包括使用Qt Creator开发一个简单的…

mdb字符串直接转成对象赋值

😘宝子:除非不再醒来,除非太阳不再升起,不然都请你好好生活,挣扎着前进,开心的笑。(●◡●)

.NET开源且好用的权限工作流管理系统

前言 系统权限管理、工作流是企业应用开发中很常见的功能,虽说开发起来难度不大,但是假如从零开始开发一个完整的权限管理和工作流平台的话也是比较耗费时间的。今天推荐一款.NET开源且好用的权限工作流管理系统(值得借鉴参考和使用):OpenAuth.Net。 官方项目介绍 .Net权限…

快速区分webGL,webGPU,unity3D和UE4

在3D图形渲染的渲染领域,很多友友们对上述概念傻傻分不清,站在前端开发角度,我用简单语言说下,结论在文章最后。一、四者都能进行3D图形渲染 它们之间有一些区别,下面我将对它们进行简单的区分:WebGPU:WebGPU是一种Web图形API,是基于底层的GPU硬件架构设计的,可以更好…

图形渲染多处理器系统分析(下)

图形渲染多处理器系统分析(下) 4.5 MESI协议 为了在SMP上提供缓存一致性,数据缓存通常支持称为MESI的协议。对于MESI,数据缓存包含每个标记的两个状态位,因此每行可以处于四种状态之一:已修改(Modified,M):缓存中的行已被修改(与主内存不同),仅在此缓存中可用。 独…

了解包装类

1. 了解包装类 什么是包装类 ? 包装类是java提供的类 每一个基本类型都有对应的包装类基本类型 包装类byte Byteshort Shortint Integerlong Longfloat Floatdouble Doublechar Characterboolean Boolean 为什么要有包装类 ? 1. 包装类是一个类类型 类中会有成员方法 使用这…

2023.12.09

2023.12.09T1 题面解题首先,不用考虑相消的字符是哪两种。因为只要有两种不同的字符存在,便一定存在一种途径使得其中一种字符被消完;换言之,一种字符只要还存在的话,就有办法与其他字符进行相消。 其次,考虑怎么消字符会使得剩余字符最少,可以当作两列的“堆馒头”问题…

【UniApp】-uni-app-内置组件

前言好,经过上个章节的介绍完毕之后,了解了一下 uni-app-全局数据和局部数据 那么了解完了uni-app-全局数据和局部数据之后,这篇文章来给大家介绍一下 UniApp 中内置组件 首先不管三七二十一,先来新建一个项目搭建演示环境 创建一个全新的项目:然后在配置一下,微信小程序…

『做题记录』[AGC032B] Balanced Neighbors

小巧构造题[AGC032B] Balanced Neighbors Description给定整数 \(N\) ,构造一个从 \(1\) 到 \(N\) 编号的 \(N\) 个节点的无向图,使得:该图不含有重边和自环,并且是连通的。 每个节点的所有邻接节点的编号之和相同。\(N \leq 100\) Solution比较小巧的构造题,由于某谷上的…

浙江省赛决赛 misc2 蝎子

b神的题,决赛没认出来是光栅图太可惜了Misc 2 tcp.stream eq 0 内得知是冰蝎3.0,key是e46023a69f8db309 <?php @error_reporting(0); session_start();// $key="e45e329feb5d925b"; //........................32...md5.........16........................reb…

01-多进程的三种创建方式

下面是python多进程官网文档的翻译我们先说 fork 启动方式。 原文的意思可能比较难以理解,我翻译一下。fork方式启动一个子进程,子进程里面的所有资源都是从主进程拷贝了一份,然后子进程执行具体的函数的时候,就会直接使用原主进程有的资源,比如说一些变量。【1】子进程可…

手机上写工作总结用什么软件好?借助工作笔记轻松写出优秀年终总结

随着年底的临近,撰写个人年终工作总结成为了许多职场人士的重要任务。因为手机是每个上班族都要随身携带的电子设备,所以想要抽时间来写年终工作总结,使用手机是比较便捷的。那么,在手机上写工作总结应该使用什么软件呢?手机上写工作总结用什么软件好? 今天小编要为大家介…

Ranger2.1集成CDH 6.3.2

Ranger介绍 针对Ranger与CDH平台的集成,需要通过编译ranger的源码,解决兼容性问题。当然,网上也有提供好的tar包,但是这种方式比较适合社区版本。对应的下载地址为: https://mirrors.tuna.tsinghua.edu.cn/apache/ranger/2.4.0/apache-ranger-2.4.0.tar.gz目前在github上,…

20211314王艺达 实验四 2

任务详情 基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现: Web服务器的客户端服务器,提交程序运行截图 实现GET即可,请求,响应要符合HTTP协议规范 服务器部署到华为云服务器,浏览器用本机的 把服务器部署到试验箱。(加分项) 具体实现代码: copy.c: /…
推荐文章