std :: string分配策略

vur*_*jie 3 c++ memory alignment stdstring allocator

我对一些基本的字符串实现有点困惑.我一直在寻找内心的工作和学习新事物.我无法完全掌握如何管理内存.

只是来自基本字符串实现的一些花絮

困扰我的是原始分配器是char类型,但分配的内存可能包含_Rep对象,加上字符数据(不必是char类型)

另外,为什么(或者更确切地说)如何调用以_M_refdata知道字符数据的开始(或结束)在缓冲区内(即this+1)

编辑:this+1只是将内部指针推到_Rep对象后面的下一个位置?

我对内存对齐和转换有基本的了解,但这似乎超出了我所读过的内容.

任何人都可以帮忙,或者给我指出更多信息丰富的阅读材料?

fil*_*mor 5

您错过了新的展示位置.这条线

_Rep *__p = new (__place) _Rep;
Run Code Online (Sandbox Code Playgroud)

初始化一个新_Rep的对象__place.之前已经分配了这个空间(意味着一个placement-new本身不分配,它实际上只是一个构造函数调用).

C和C++中的指针算术告诉你,这this + 1是一个指向sizeof(*this)字节右侧的指针this.由于(__capacity + 1) * sizeof(_CharT) + sizeof(_Rep)之前已经分配了字节,因此将_Rep对象之后的空格用于字符数据.因此布局如下:

| _Rep |  (__capacity + 1) * _CharT  |
Run Code Online (Sandbox Code Playgroud)