C++ 中 Pascal 字符串的数据布局
Data layout for pascal string in C++
"pascal string" 最有效的表示方式是一个字节的大小和最多 255 个字符在 C++ 中的样子:
包含大小和数据的结构:
struct Content
{
uint8_t size;
std::array<uint8_t, 255> data;
};
这会将数据直接存储在堆栈上,这应该很快,但是对象会占用一些堆栈space,并且移动操作很昂贵
A std::unique_ptr<Content>
(与 (1) 中的 Content
相同)。需要额外的取消引用来访问大小和数据,但移动操作很便宜。
将大小放在堆栈上,将数据放在堆上。这意味着访问大小很容易,移动操作仍然很便宜。但是,由于在指向数据的指针之前进行填充,因此浪费了 7 个字节。这类似于具有固定容量的 std::vector
,因此可能不是很现有,或者?
我发现选项 (1) 是最自然的方法。这使用户可以灵活地将数据存储在堆栈上,而 (2) 强制使用堆存储。
"pascal string" 最有效的表示方式是一个字节的大小和最多 255 个字符在 C++ 中的样子:
包含大小和数据的结构:
struct Content { uint8_t size; std::array<uint8_t, 255> data; };
这会将数据直接存储在堆栈上,这应该很快,但是对象会占用一些堆栈space,并且移动操作很昂贵
A
std::unique_ptr<Content>
(与 (1) 中的Content
相同)。需要额外的取消引用来访问大小和数据,但移动操作很便宜。将大小放在堆栈上,将数据放在堆上。这意味着访问大小很容易,移动操作仍然很便宜。但是,由于在指向数据的指针之前进行填充,因此浪费了 7 个字节。这类似于具有固定容量的
std::vector
,因此可能不是很现有,或者?
我发现选项 (1) 是最自然的方法。这使用户可以灵活地将数据存储在堆栈上,而 (2) 强制使用堆存储。