c++ - 是否可以对非常大的 STL 字符串进行浅拷贝?

标签 c++ windows linux stl

下午好,我们正在构建重复数据删除器的原型(prototype)。我们正在使用一个 STL 字符串数组来存储要删除的记录。该数组如下所示:

std::string* StringArray = new std::string[NumberDedupeRecords]

记录非常大,有160,000,000字节。当我们尝试在 std::string* StringArray 中存储要删除重复数据的记录的 std::string 版本时,STL 会对该字符串进行深度复制,并 mallocs a至少 160,000,000 字节的新缓冲区。我们很快就用完了堆内存并得到了一个 std::bad_alloc 异常。是否有避免深拷贝和 std::bad_alloc 的解决方法?也许我们应该使用一种新的数据结构来存储要进行重复数据删除的 std::string 记录,或者我们应该保存 auto_ptr

我们在这里展示一个代码片段:

std::string clara5(curr.getPtr()); 
char* const maryptr = (curr.getPtr() + n - curr.low()); 
maryptr[54] = '\x0'; 
StringArray[StringArrayCount] = clara5; 
curr.mPtr = (char*)StringArray[StringArrayCount].c_str(); 

std::multiset<Range>::iterator miter5 = ranges_type.lower_bound(Range(n));
(*miter5).mPtr = curr.mPtr; StringArrayCount += 1;

谢谢。

最佳答案

您可以简单地获取原始 std::string 的指针或引用 - 如果您发现有必要执行各种所有权策略,则包括智能指针。

关于c++ - 是否可以对非常大的 STL 字符串进行浅拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063391/

相关文章:

c++ - 当信号在 Matlab 中的原始数据中时计算频率轴上的 FFT

linux - 每秒 Ping 服务器以查看正常运行时间

c - 如何使用makefile链接依赖库

c++ - 将符号表作为继承属性传递以提升精神规则

c++ - SFML window.draw();只出现一小段时间

c++ - C关键字/函数是否未包含在C++的std namespace 中?

c++ - 以编程方式检测按键的更好方法?

python - 使用python获取Windows 7中可用的odbc驱动程序列表

windows - 在 vsjitdebugger 列表中包含 WinDbg

java - 无法使用 java jdbc 驱动程序连接到 Mysql