代码之家  ›  专栏  ›  技术社区  ›  CiNN

如何在输出结构中处理字符串分配

c
  •  0
  • CiNN  · 技术社区  · 16 年前

    处理包含字符串的输出结构的最佳方法是什么?

    struct info 
    { 
    wchar_t * text; 
    size_t text_len; 
    }
    
    void Foo(struct info * output);
    
    • 用户需要自己分配文本

      输出可以循环使用。
      很难知道需要分配多少内存,如果要存储输出,可能会浪费内存(例如保留一个列表a项)

    • 在foo中分配文本

      一个痛苦的用户免费输出,因为他必须解放每一个文本之前(可以使一个FrimeStfIt信息,以减轻疼痛)
      循环内不太好

    • 从foo内部分配输出

      FoO可以在Stutt信息中嵌入文本,用户只需要自由输出就可以释放所有的文本。
      有利于存储(foo知道需要分配多少)。
      但是如果在循环中用作一个短命的变量,因为它不能被回收,可能会给内存带来很大的压力。

    windows使用“用户需要自己分配文本”,要么分配足够,要么需要调用函数两次以获得所需的大小。

    3 回复  |  直到 16 年前
        1
  •  3
  •   bdonlan    16 年前

    没有一种最好的方法-你提出的所有选择都是在某个时候使用的。重要的是要做好文档记录,并在实用的情况下保持库中所有功能的一致性。

        2
  •  1
  •   lothar    16 年前

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

    有了这个习惯用法,分配的存储可以根据需要增长,但是用户可以随时选择通过重新分配较小的存储来“收缩”(如果需要,将重新开始增长)。

        3
  •  0
  •   Alexey Orlov    16 年前

    lothar很好地总结了第一个习惯用法的优点——很可能它是通用解决方案的最佳选择。

    但是,有时第三个选项(修改)更好——如果有很多要输出的话。为了避免记忆压力,你可以在混合中添加池。