2009-05-05 52 views
0

处理输出结构中包含一些字符串的最佳方法是什么?如何处理输出结构中的字符串分配

struct info 
{ 
wchar_t * text; 
size_t text_len; 
} 

void Foo(struct info * output); 
  • 用户需要分配文本自己

    输出可以在一个循环
    很难知道需要多少内存分配被回收,内存可能的浪费,如果输出存储(例如,保持列表中的项目)

  • 分配文本中富

    苦为用户自由输出,因为他之前释放每个文字(可以使FreeStructInfo以缓解疼痛)
    不是那么好内循环

  • 从富

    符可以在结构信息嵌入文本分配输出用户只需要自由输出就可以释放所有。
    适合存储(美孚知道它需要多少分配),
    但也许如果在一个循环中用作短命变量,因为它不能被回收的内存很大的压力。

Windows使用“用户需要分配自己的文字”,要么你分配足够的,或者你需要调用函数两次获得所需要的尺寸。

+0

我注意到一些事情,cpu缓存,当在结构中嵌入文本时,它将已经在需要的时候在cpu缓存中,所以它是某种优化 – CiNN 2009-05-17 15:45:33

回答

3

有没有一个最好的方法 - 在一段时间或其他使用所有你提出的选项。重要的是要把它记录好,并在图书馆的所有功能中保持一致,在实际的情况下。

1

你可以使用第一个成语(用户分配),如果该字符串的空间是不够的,你重新分配。如果你和用户同意使用相同的分配(如malloc/free),这将起作用。这将为您提供最佳性能(每次迭代都不分配),并且仍然方便用户使用。

有了这个成语根据需要分配的存储空间的增长,但用户可以在任何时候选择通过重新分配较小的存储(将开始在必要时再次增长)“缩水”了。

+0

请注意指定第一次调用所需的初始化(可能长度和指针都为零,但记录了要求)。 – 2009-05-05 01:59:50

0

洛萨总结相当不错第一成语优势 - 相当可能这是最适合一般的解决方案。

然而,有些时候,第三个选项(修改)是更好的 - 如果你有很多的输出。为了避免内存压力,您可以将池添加到组合中。