【发布时间】:2012-06-08 12:11:47
【问题描述】:
我正在开发一个程序,该程序将重要数据结构存储为带有程序定义分隔符的非结构化字符串(因此我们需要遍历字符串并提取我们需要的信息)并且我们想转换将其转换为更结构化的数据类型。
本质上,这将需要一个结构体,其中一个字段描述结构体包含的数据类型,另一个字段是数据本身的字符串。字符串的长度在分配时总是已知的。我们通过测试确定,将每种数据类型所需的分配数量翻倍是不可接受的成本。有没有办法在一次分配中为结构和结构中包含的 std::string 分配内存?如果我们使用 cstrings,我只需要在结构中添加一个 char * 并在为结构和字符串分配足够大的块后将其指向结构的末尾,但如果可能的话,我们更喜欢 std::string。
我的大部分经验都是使用 C,所以请原谅此处显示的任何 C++ 无知。
【问题讨论】:
-
如果我理解正确的话,字符串在构造后不能增长,内存将由管理整个对象的人管理......既然你要走 C 路,为什么不直接使用 @987654321 @? C 字符串最糟糕的部分是需要管理内存,但在您的情况下,这似乎不是问题,是吗?
-
+1 表示证明在半途而废之前需要进行优化!
-
如果你真的热衷于使用
std::string而不是c-string,你可以考虑使用自定义分配器来实现你想做的一些事情。这可以让您将字符串集中在一个分配中,但它仍然不会一次性分配所有内容(即您的结构),并且最终可能会成为维护的噩梦。可能最好坚持使用 c-strings。
标签: c++ memory-management stdstring