2009-05-05 19 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

洛薩總結相當不錯第一成語優勢 - 相當可能這是最適合一般的解決方案。

然而,有些時候,第三個選項(修改)是更好的 - 如果你有很多的輸出。爲了避免內存壓力,您可以將池添加到組合中。