C++中std :: string的底层结构是什么?
据我所知,有两个不同的概念:
1)整个字符串用char指针(char*)实现.
2)字符串的某些部分使用静态数组实现.它的大小等于40,如果字符串的长度超过40,则分配动态内存.
哪一个是正确的?
1)整个字符串用char指针(char*)实现.
这不是法律实施. size()并且capacity()必须是常量,因此您需要将该信息存储为指针或整数变量.
2)字符串的某些部分使用静态数组实现.它的大小等于40,如果字符串的长度超过40,则分配动态内存.
该数组不是静态成员,但这是合法的,因为C++ 11并称为小/短字符串优化.实现这一点的一种常见方法是
struct _internal
{
char * start;
char * end;
char * cap;
};
union guts
{
_internal ptrs;
char arr[sizeof(_internal)];
}
Run Code Online (Sandbox Code Playgroud)
并且字符串将是一个包装器guts.这使得数组占用的空间不会超过指针版本,但允许您使用数组,直到您拥有多个sizeof(_internal) - 1字符.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |