Добрый день, Мы строим прототип дедупера. Мы используем массив строк STL для хранения записей, подлежащих развертыванию. Массив выглядит так:
std::string* StringArray = new std::string[NumberDedupeRecords]
Записи очень большие, размером до 160 000 000 байтов. Когда мы пытаемся сохранить версию записи std::string
для дедупликации в std::string* StringArray
, STL делает глубокую копию строки и выделяет новый буфер размером не менее 160 000 000 байтов. Мы быстро исчерпали кучу памяти и получили std::bad_alloc exception
. Есть ли обходной путь, чтобы избежать глубокого копирования и 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;
Спасибо.