String在VS与Linux下的区别

news/2024/11/30 20:41:05/

目录

一、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.ppmy.cn/news/1327326.html

相关文章

linux 使用笔记

1.查看运行内存 a.Free 快速查看内存的方法,也是经常使用的命令, -h 更人性化的显示内存的单元 -m 以M的形式显示 b.Top Top命令提供了实时性的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。 如上所示,top命令可以看…

跟着cherno手搓游戏引擎【7】Input轮询

在引擎程序中任何时间,任何位置都能知道按键是否按下、鼠标的位置等等信息。 与事件系统的区别:事件系统是在按下时调用并传递按键状态;轮询是每时每刻都能获取按键状态 创建基类: YOTO/Input.h:名如其意 #pragma …

WPF中Image控件Source的多种指定方式

XAML中 1、直接绝对路径直接给Source 2、将图片放到项目里面,设置图片为资源;Source写法为: (1)Source"pack://application:,,,/label里面的Content;component/folder/test.png" (2&…

linux切换root用户su - root和su root的区别

这里说一下login shell和 no login shell的区别 通过tty客户端登陆的shell就是login shell,通过在图形界面使用ctrlshiftt的方式新建的shell是no login shell login shell 主要读取两个配置文件/etc/profile和~/.bash_profile no login shell 读取的文件和顺序为&am…

VNode来描述⼀个DOM结构

VNode是一个虚拟节点,用于描述一个DOM结构。在Vue中,VNode是虚拟DOM中的一个节点,它代表真实DOM中的一个节点或组件。通过使用VNode,Vue可以避免直接操作真实DOM,而是通过创建虚拟DOM来更新页面。 VNode包含了节点的属…

ts中 any 和 unknown 有什么区别,分别什么时候使用

any 和 unknown 都是顶级类型 top type,也就是所有类型的父类型 (1)any代表任意类型, 是不做任何检查,相当于不使用 ts,不建议使用,使用 a as any as string 之类的,可以让类型检查…

流式湖仓增强,Hologres + Flink构建企业级实时数仓

云布道师 2023 年 12 月,由阿里云主办的实时计算闭门会在北京举行,阿里云实时数仓Hologres 研发负责人姜伟华现场分享 HologresFlink 构建的企业级实时数仓,实现全链路的数据实时计算、实时写入、实时更新、实时查询。同时,随着流…

GitHub图床TyporaPicGo相关配置

本文作者: slience_me 文章目录 GitHub图床&Typora&PicGo相关配置1. Github配置2. picGo配置3. Typora配置 GitHub图床&Typora&PicGo相关配置 关于Typora旧版的百度网盘下载路径 链接:https://pan.baidu.com/s/12mq-dMqWnRRoreGo4MTbKg?…