basic_string的基本格式:

其中cap和local_buf是在同一内存空间(使用union共享)

tt.svg

其中dataplus实际上就是个指针,指向实际存储字符的内存空间,length就是字符串长度,cap是当前分配出的空间大小,local_buf是一块0x10大小的本地空间

basic_string实际结构有两种情况:

  1. 字符串长度在0x10或以下,直接使用local_buf,cap字段禁用,dataplus指向local_buf开头
  2. 字符串长度在0x10以以上,在堆上分配内存,cap里存分配出的空间大小,local_buf禁用

使用的空间总是连续的,其迭代器满足 forward_iterator ,且相当于普通指针

具体实现与vector相似