我需要在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. 在C++中分配和释放char *
- 3. C#重新分配类
- 4. 数组重新分配C++
- 5. 分配的char * C [],在结构
- 6. 将内存分配给C++中的char *
- 7. 在C中重新分配字符串数组并分配新字符串
- 8. 在C++中分割const char *
- 9. 重新分配
- 10. 分配(和取消分配)内存char * [64]在C
- 11. 内存分配/重新分配问题
- 12. 分配最小值为char C++
- 13. c char **导致分配错误
- 14. C++:可以为int分配一个char *?
- 15. 将内存分配给char * C语言
- 16. C++类数组内存重新分配
- 17. 客观的c重新分配点
- 18. 重新分配C++数组的内存。
- 19. 目标C重新分配变量
- 20. 重新分配在C中的大文本文件中读取
- 21. 重新分配window.orientation?
- 22. 如何在char * func()中正确删除用新[]分配的char数组?
- 23. 重新分配resgen
- 24. 重新分配XmlDocument
- 25. 重新分配textbox.text
- 26. 在“if”块中分配char文字
- 27. 分配char - 分段错误
- 28. 在descructor中重新分配指针
- 29. C++分配char值(通过使用堆栈弹出)char *
- 30. 在C++中为char *分配内存时遇到问题
我不明白你说的关于'的std :: string'运行内存是什么。如果你使用那么多的记忆,你需要把事情联系在一起。否则,当你完成它时,不要将字符串保留。 – GManNickG 2010-04-29 04:31:48
你有没有证据证明'std :: string'不能用来完成这个? – 2010-04-29 04:45:52