我需要在C++中的「char *」中存儲一定數量的數據,因爲我想在超過max_size()時避免std :: string耗盡內存。但數據來自網絡的數據塊,因此每次獲取數據塊時都需要使用重新分配。在C++中有沒有優雅的char *重新分配和連接解決方案?在C++中Char *重新分配
回答
你可以去C的方式並使用malloc()
/realloc()
,但realloc()
只會分配一個新的塊,將舊的東西複製到新的東西,並有時無論如何釋放舊的塊。也很難正確使用。
您可以分配一個巨大的緩衝區和/或以指數級增長,從而抵消問題的嚴重程度。
或者您可以使用ropes。
「你可以分配一個巨大的緩衝區和/或以指數級增長,抵消問題的嚴重性。」注意:大多數'std :: string'實現已經這樣做了。 – 2010-04-29 04:39:18
@比利 - 這並不奇怪。我想知道OP是否知道他會遇到分配問題,或者他是否過早地進行了優化。 – 2010-04-29 04:45:22
通常情況下,如果在塊之後的內存空間中沒有空間,realloc只需要進行復制(當然,這完全取決於實現,但是我已閱讀的所有內容(以及我編寫的少數內容)優化對於那種情況)。 – paxdiablo 2010-04-29 04:54:51
std:隨着字符串的大小增大,想到自動分配的向量。只需將Vector<char>
和push_back()字符分配給您的內容。
這與OP表示他明確希望避免的99%的時間沒有不同。 – 2010-04-29 04:39:00
在visual studio中,max_size()是4294967294個字符,大約爲4Gb。如果你能告訴我們你是如何冒着超過這些字符的風險,這將是有趣的。
如果問題不突然出現的時候,這是隻有約使它失效安全然後
myConcatStr(string str1, string str2)
{
if (str1.length() + str2.length()) <= str1.max_size() // if there is no overflow problem
str1.append(str2); // use stl append
else
//use alternate method instead or throw an exception
}
錯誤..這是4GiB,而不是8。 – 2010-04-29 12:40:53
不適用於'字符串'(根據定義,'sizeof(char)'是1)。對於'wstring'元素的大小可能是2. – 2010-04-29 15:03:18
mybad,編輯... – aCuria 2010-04-30 02:26:41
- 1. C++ char分配
- 2. 如何重新分配char數組中元素的值C
- 3. 在C++中分配和釋放char *
- 4. 在C中重新分配內存
- 5. 如何在while循環中重新分配* char []?
- 6. C內存分配 - char *和char sizeof
- 7. C#重新分配類
- 8. 數組重新分配C++
- 9. 向量重新分配C++
- 10. 將內存分配給C++中的char *
- 11. 分配的char * C [],在結構
- 12. 如何重新分配的值在C++
- 13. 資源重新分配在C++
- 14. 在C++中分割const char *
- 15. 在C中重新分配字符串數組並分配新字符串
- 16. 分配(和取消分配)內存char * [64]在C
- 17. 重新分配
- 18. 轉換分配/重新分配從C++多維數組到C
- 19. 內存分配/重新分配問題
- 20. 如何使用C分配char *值到char使用C
- 21. 重新分配**數組
- 22. 分配最小值爲char C++
- 23. c char **導致分配錯誤
- 24. 將內存分配給char * C語言
- 25. C++:可以爲int分配一個char *?
- 26. C++字符串不重新分配
- 27. 目標C重新分配變量
- 28. 重新分配塊的Objective-C
- 29. C++類數組內存重新分配
- 30. 重新分配C++引用變量
我不明白你說的關於'的std :: string'運行內存是什麼。如果你使用那麼多的記憶,你需要把事情聯繫在一起。否則,當你完成它時,不要將字符串保留。 – GManNickG 2010-04-29 04:31:48
你有沒有證據證明'std :: string'不能用來完成這個? – 2010-04-29 04:45:52