c++ string类型内存存储开头4字节的含义

来源:5-11 string的简介

慕妹9759069

2023-07-21

以下两个分别是创建字符串 “a” 和 "b"的内存序列。
尾部8字节分别表示size和capacity。
从 61或62开始存储实际字符串的内容。61后面的00是‘\0’结束符。
所以默认capacity初始值为15,是指实际字符存15个是
开头的4个字节是什么意思?

98 13 45 01 61 00 cc cc cc cc cc cc cc cc cc cc cc cc cc cc 01 00 00 00 0f 00 00 00
78 27 0c 01 62 00 cc cc cc cc cc cc cc cc cc cc cc cc cc cc 01 00 00 00 0f 00 00 00

写回答

1回答

quickzhao

2023-07-21

string类在不同的编译器中实现的方式不一样的,其实跟踪源码可以很容易看出,但是很可惜Visual Studio中STL可读性很差。大致的结构应该是string类的信息都包含在一个模板类中,而这个模板类有继承关系,根据C++对象模型,子类包含有父类成员变量的信息,所以你看的前四个字节应该是模板类中基类结构的指针。你可以试着使用编译宏cl /d1 reportSingleClassLayout来看下string类对象内部的结构细节,这部分在体系课中第六周的C++对象模型中有说明。

0
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程