(C++)VS下sizeof(string(““))与linux-g++下sizeof(string(““))大小区别及原因剖析

news2024/12/23 13:17:16

个人主页:Lei宝啊 

愿所有美好如期而遇


说明 

博主是x86平台,所以下面的结果是28;x64平台下是40,size_t变了,由int变long long。

接下来我们先来介绍 vs 下string的数据结构

我们可以看到有一个_Buf数组,这个数组的大小为16个字节,但是存有效元素个数为15,最后一位存\0,以及char*,int size,int capacity,共12字节,所以我们计算下来总28字节。

g++下为什么是8个字节呢?首先,linux下默认是64平台,所以我们也就知道其实这是个指针,他不存大小的空间吗?我们来看:

我们发现是存的,也就是说存在size和capacity去记录大小,那么他们在哪里呢?

那么什么是引用计数呢? 我们在拷贝stack或者string时,会发生深拷贝,但是如果我们采用浅拷贝,那么就会是这样:

那么当a和b析构时,这一块空间会被析构两次,程序也就崩了,所以引用计数就用在这里,g++下就是浅拷贝,这块空间每被引用一次,引用计数+1,当析构时,引用计数不为1,就减减,当他为1时,析构释放这块空间。

那么也许你会问,共用一块空间,那如果a要写入数据,b不就被影响了吗?所以此时会发生写时拷贝,谁写入数据,操作系统就会为其分配一块新的空间,并使指针指向新的空间,将旧数据拷贝过来。

这样做意义是什么呢?这样做是在赌,赌你不写入数据,只读,这样就省下资源了,就算要写入,最多也就是之前的样子,稳赚不赔。


本篇讲解就到这里了。

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

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

相关文章

【IDEA】反向撤销操作快捷键 ctrl+shift+z 和搜狗热键冲突的解决办法

当我们执行某些操作时与搜狗热键冲突,直接取消搜狗的快捷键即可!!!以下以 ctrlshiftz 为例。 在输入悬浮框右键找到更多设置 按键里面找到系统功能快捷键设置 取消掉冲突的热键即可

Word插件-好用的插件-PPT 素材该怎么积累-大珩助手

PPT 素材该怎么积累? 使用大珩助手中的素材库功能,将Word中的,或系统中的文本文件、图片、其他word文档、pdf,所有见到的好素材,一键收纳。 步骤:选中文件,按住鼠标左键拖到素材库界面中&…

IBM DMC运行在RedHat 9的FIPS模式

文章目录 环境步骤打开RedHat的FIPS模式安装DMCnssdbpk12util和certutil导入certificate导入Liberty的SSL key导入Java的certificate查看nssdb(可选) 配置jvm.options配置server.xml配置java.security配置dswebserver_override.properties重启DMC验证 常…

End-to-End Reconstruction-Classification Learning for Face Forgery Detection

一、研究背景 现有模型主要通过提取特定的伪造模式进行深度伪造检测,导致学习到的表征与训练集中已知的伪造类型高度相关,因此模型难以泛化到未知的伪造类型上使用。 二、研究动机 1.真实样本的特征分布相对更为紧凑,因此学习真实人脸之间的…

漏洞复现-华为Auth-HTTP服务器任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

MyBatis缓存机制流程分析

前言 在进行分析之前,建议快速浏览之前写的理解MyBatis原理、思想,这样更容易阅读、理解本篇内容。 验证一级缓存 MyBatis的缓存有两级,一级缓存默认开启,二级缓存需要手动开启。 重复读取跑缓存 可以看到,第二次…

ubuntu install sqlmap

refer: https://github.com/sqlmapproject/sqlmap 安装sqlmap,可以直接使用git 克隆整个sqlmap项目: git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev 2.然后进入sqlmap-dev,使用命令: python s…

利差是什么?anzo Capital昂首资本换个角度学利差

在交易论坛上最常问也是问的最多的一个问题就是“外汇中的利差是多少?”,今天让anzo Capital昂首资本换个角度试着找出答案。 在现代生活中,我们必须为商品和服务付费,包括金融市场上提供的商品和服务。同样的在金融市场中也需要为商品和服…

庙算兵棋推演平台配置

9月23开始,9月26完成。因为那时刚从大连回来,十一之后又一个紧急项目当项目负责人,所以隔了这么久才发出来。 我尝试进行制作平台AI,想在我的小平板上配好,最好还可以移植。于是我采用WSL(windows自带的do…

万界星空科技MES系统中的生产调度流程

MES系统生产调度的目标是达到作业有序、协调、可控和高效的运行效果,作业计划的快速生成以及面向生产扰动事件的快速响应处理是生产调度系统的核心和关键。 为了顺利生成作业计划,需要为调度系统提供完整的产品和工艺信息,MES系统生成作业计…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion 局部重绘(利用SD进行换脸)

首先明确一个概念:绘图是对整个图片进行重绘,但局部重绘是对你选中的位置重绘,这就是两个功能的不同点。 局部重绘详细步骤: 1、用画笔涂黑你想修改的地方,图片右边的蓝色点可以拖动 改变画笔大小,边缘适合用小画笔,中间用粗画笔; 2、在正向关…

C语言普里姆(Prim)算法实现计算国家建设高铁运输网最低造价的建设方案

背景: 描述:为促进全球更好互联互通,亚投行拟在一带一路沿线国家建设高铁运输网,请查阅相关资料 画出沿线国家首都或某些代表性城市的连通图,为其设计长度最短或造价最低的高铁建设方案。 要求:抽象出的图…

实战React18和TS+Vite,跟进实战阅读类App的心得分享

随着 React 18 的发布,以及 TypeScript 和 Vite 在前端开发领域的普及,使用 React 18 结合 TypeScript 和 Vite 开发实战阅读类 App 的经验已经成为了前端开发者们的热门话题。在本文中,我将分享我的心得体会,并给出一些示例代码&…

深度学习第5天:GAN生成对抗网络

☁️主页 Nowl 🔥专栏 《深度学习》 📑君子坐而论道,少年起而行之 ​​ 一、GAN 1.基本思想 想象一下,市面上有许多仿制的画作,人们为了辨别这些伪造的画,就会提高自己的鉴别技能,然后仿制者…

【EI征稿倒计时3天】第四届IEEE信息科学与教育国际学术会议(ICISE-IE 2023)

第四届IEEE信息科学与教育国际学术会议(ICISE-IE 2023) 2023 4th International Conference on Information Science and Education(ICISE-IE 2023) ICISE-IE2024已上线岭南师范学院官网(点击查看) 第四届IEEE信息科学与教育国…

【JavaEE学习】初识进程概念

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、…

IoTDB控制台工具Workbench

文章目录 概述环境要求安装下载启动服务 登录用户界面主界面 连接 概述 Workbench是一个可创建多个连接的图形化数据库管理工具,用于管理IoTDB,提供元数据的可视化与管理、数据的增删改查以及权限控制等功能。Workbench不仅满足专业开发人员的所有需求&…

【lesson7】数据类型之string类型

文章目录 数据类型分类string类型set类型测试 enum类型测试 string类型的内容查找找所有女生(enum中)找爱好有游泳的人(set中)找到爱好中有足球和篮球的人 数据类型分类 string类型 set类型 说明: set:集…

Qt 使用百度的离线地图

使用百度离线地图,一下载百度离线包(offlinemap);二是准备地图瓦片(不同级别的瓦片);三 准备html主页面;四,Q&…

免费提升图片清晰度的AI平台,效果对比一目了然!

随着AI技术的不断发展,我们有了更多的机会去挖掘和提升图片清晰度的可能性。无论是老照片的翻新、档案的修复,还是遥感图像的处理、医学影像的分析,AI都能大显身手。在过去可能很难办到的将分辨率低的图片转为高清图,如今借助AI简…