String在VS与Linux下的区别

目录

一、string的成员

 1.VS

2.Linux 

二、string的扩容机制

1. VS

2.Linux 


 

一、string的成员

string是C++标准库中的一个类模板,用于表示和操作字符串

string在 Windows 与 Linux 中的成员不是相同的

 1.VS

4个成员:_str_size _capacitybuf[15] 

32位下共28字节:4 ,4 ,4 ,16

Windows系统下会开辟 buf 数组,可以减少小字符串的内存开销,更高效的利用系统内存

每当创建一个string对象时,编译器就会检查当前字符串的大小,如果小于16,就使用buf来储存;如果大于16,就会重新开辟对应长度的空间(此时buf废弃)

 

2.Linux 

 首先需要注意,Linux下默认是64位系统,所以指针的大小为 8 字节!!

 运行程序后,打印结果为 8,所以 string 的成员只有一个指针,这个指针指向一个空间(结构体),这个空间内包含如下成员:

— size(字符串长度)

— capacity(空间大小)

— 引用计数(用于写时拷贝)

 在内存中存储时只有一个字符串,不过这个字符串每次都会多开12个字节,前4个存size,中间4个存capacity,后4个存引用计数。需要改变数据时偏移相应的字节,转成int*后解引用。这个指针指向字符串的开始,即这12个字节后

写时拷贝:有时拷贝时不去写(修改),就不会去重新拷贝,只有当写 时,才会拷贝;如果不写,则不用拷贝(提高效率)。当引用计数为0时,才会析构这段空间

二、string的扩容机制

1. VS

很明显,是1.5倍扩容

2.Linux 

 

 2倍扩容

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

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

相关文章

71.工作中redis的常用场景总结

文章目录 一、简介二、统计访问次数三、缓存四、分布式锁五、限流六、排行榜七、作为Session的存储器,存用户登录状态八、位统计九、生成全局ID 一、简介 Redis作为一种优秀的基于key/value的缓存,有非常不错的性能和稳定性,无论是在工作中&…

【ARM Cortex-M 系列 1.1 -- Cortex-M33 与 M4 差异 详细介绍】

请阅读【嵌入式开发学习必备专栏 之 Cortex-Mx 专栏】 文章目录 背景Cortex-M33 与 M4 差异Cortex-M33Cortex-M4关系和差异举例说明 背景 在移植 RT-Thread 到 瑞萨RA4M2(Cortex-M33)上时,遇到了hardfault 问题,最后使用了Cortex…

大数据开发之kafka(完整版)

第 1 章:Kafka概述 1.1 定义 Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。 发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只…

全志A133AndroidQ编译方式

编译uboot: cd longan/brandy/brandy-2.0 ./build.sh -p sun50iw10p1 //A133-android-10-plus\longan\brandy\brandy-2.0\u-boot-2018\u-boot.bin复制为u-boot-sun50iw10p1.bin 或者 //longan\brandy\brandy-2.0\u-boot-2018\configs\sun50iw10p1_defconfig cd …

Java String基础学习

目录 1、String的构造方法 2、String内存模型 3、字符串的比较 4、字符串的练习 1、用户登录系统 2、遍历字符串 3、统计字符次数 4、拼接字符串 5、字符串的反转 6、金额转换 7、手机号屏蔽 * 8、身份证信息查看 9、敏感词替换 5、StringBuilder 1、概念及练习…

leetcode热题100.三数之和

Problem: 15. 三数之和 文章目录 题目解题方法复杂度Code 题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元…

【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态

步进电机控制 设计思路 电路设计: 选用AT89C51单片机作为电路核心部件,外加LM016L液晶显示屏作为显示,显示步进电机的Fast,Slow,Stop的三个状态将AT89C51单片机所选引脚与LM016L控制引脚相连,再将数据通…

ASEPRITE使用笔记

aseprite学习笔记 快捷键 新建图层后,按快捷键c可以调出画布属性框放大缩小画布快捷键,鼠标滚轮移动画布快捷键,空格ctr+d,取消选取基本概念 软件五个基本区域:菜单栏、工具属性栏、工具栏、图层栏、颜色栏颜色栏分为色板和调色区域注意事项 创造时,需要把输入法调整成应…

03.net6必须熟悉的类

C#必须熟悉的类 值和实例 true,false ,“”,‘a’,34f,34,34m,“ggd”,$“gg{age}” 基本类型和常用类型 byte int char decimal float double string DateTime TimeSpan bool Array dynamic var 自动推断类型 常用类型 Object Console Math …

java创建线程的三种方式

1、实现Runnable接口 这是最常用的方法,需要创建一个实现Runnable接口的类,并重写run()方法。然后,创建一个Thread对象并将这个实现Runnable接口的类的实例作为参数传递给Thread的构造函数。最后,调用Thread对象的start()方法来启…

(2024,VMamba,交叉扫描,线性复杂度,全局感受野,动态权重)视觉状态空间模型

VMamba: Visual State Space Model 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 方法 3.1 基础概念 3.2 2D 选择性扫描 3.3 VMamba 模型 3.3.1 整体架构 3.3.2 VSS…

大数据开发之Kafka(broker、消费者、eagle监控、kraft模式)

第 4 章:Kafka Broker 4.1 Kafka Broker工作流程 4.1.1 Zookeeper存储的Kafka的信息 1、查看zookeeper中的kafka节点所存储的信息 启动Zookeeper客户端 [atguiguhadoop104 zookeeper-3.5.7]$ bin/zkCli.sh 通过ls命令列出kafka节点内容 [zk: localhost:2181(CO…

Windows11添加美式(纯英文)输入法

打开设置,选择“时间和语言” 选择“语言和区域” 检查语言中否有英语(美国),如果没有,请单击“添加语言” 单击英语(美国)右方的更多选项按钮,选择“语言选项” 找到下方“键盘…

对象数组变成一维数组,导出txt文件

假设对象数组格式为此 arr1: [{id: 1,title: 我是1目录,children: [{id: 11,title: 我是1-1目录,children: [{id: 111,title: 我是1-1-1目录,children: [],},],},],},{id: 2,title: 我是2目录,children: [{id: 21,title: 我是2-1目录,children: [],},],},], 页面如下 先在页面…

Kafka Connect: Debezium MySQL Connector 的 Partition 和 Replication 配置

使用 Kafka Connect 的 Debezium MySQL Connector 将 MySQL 数据库中的 CDC 数据写入 Kafka 时,在 Kafka 默认允许自动创建 Topic 的情况下,Kafka Connect 自动创建的 Topic 只有一个 Partition,在实际应用中,这显然是不行&#x…

gin中使用JWT

1.jwt使用 安装 go get github.com/golang-jwt/jwt/v4 默认Claim 如果我们直接使用JWT中默认的字段,没有其他定制化的需求则可以直接使用这个包中的和方法快速生成和解析token。 // 用于签名的字符串 var mySigningKey []byte("liwenzhou.com")// G…

【Spring 篇】MyBatis中的CRUD魔法:数据之美的四重奏

MyBatis,这个数据持久化的魔法师,以其优雅的SQL映射和简洁的配置文件,为我们呈现出一场CRUD(Create, Read, Update, Delete)的奇妙之旅。在这篇博客中,我们将深入探讨MyBatis中的增、删、改、查操作&#x…

溯流而上:从算盘到现代计算机——计算设备历史与关键人物的探索之旅

Tracing the Evolution: From Abacus to Modern Computers - An Exploratory Journey Through the History of Computing Devices and Key Figures 溯流而上:从算盘到现代计算机——计算设备历史与关键人物的探索之旅 Good day! Today, we embark on a fascinating …

linux基础学习(5):yum

yum是为了解决rpm包安装依赖性而产生的一种安装工具 1.yum源 1.1配置文件位置 yum源的配置文件在/etc/yum.repos.d/中 *Base源是网络yum源,也就是需要联网才能使用的yum源。默认情况下,系统会使用Base源 *Media源是光盘yum源,是本地yum源…

std::atomic

一、概述 std::atomic 是C11引入的一个模板类,用于提供原子操作的类型。在多线程编程中,当多个线程同时访问同一块数据时,可能会导致数据竞争和不确定的行为。std::atomic 可以用来创建原子类型的变量,保证对该变量的操作是原子的…