Хранение указателей в unordered_map в переполнении стека

Так что мой код использует tr1::unordered_map<int, ContainerA> где ContainerA выглядит примерно так:

class ContainerA
{
int* _M_type;
unsigned int _M_check;
int _M_test;
unsigned int _M_any;
index _M_index;
index _M_newindex;
objectB _M_cells[10];
vector<int> _M_mapping[10];
}

Количество записей в моем unordered_map составляет порядка миллионов, и на каждом временном шаге десятки тысяч (если не сотен тысяч) записей удаляются и добавляются. Кажется, что большая часть моего вычислительного времени расходуется на индивидуальное выделение каждого экземпляра класса ContainerA.

Решение, которое я предлагаю для ускорения, состоит в том, чтобы динамически распределять предполагаемое количество объектов ContainerA, необходимых в начале, и заменять unordered_map для объектов ContainerA на unordered_map для указателей. tr1::unordered_map<int, ContainerA*>,

Это кажется хорошей идеей для меня, однако после некоторого исследования мне не кажется, что этот подход является распространенным, поэтому я задаюсь вопросом, если я что-то упустил.

Есть ли какие-либо недостатки этого подхода, кроме дополнительных накладных расходов указателей на память?

Редактировать :
Как указано в комментариях ниже, проблема может быть связана с моим распределением памяти. Я выделяю свою память следующим образом:
Я строю ContainerA объект, используя его конструктор ContainerA obja(int* type, int test), На этом этапе ContainerA Конструктор позволяет objectB массив и vector<int> массив по умолчанию построен.

После построения моего ContainerA, все мое vector<int> а также objectB нужно выделить немного памяти в куче. Это, вероятно, длительный этап.

Вероятно, было бы возможно избежать освобождения и перераспределения памяти без использования unordered_map к указателям, но просто меняя содержимое памяти, как это было предложено. Однако мне нужно было бы иметь какой-то способ отслеживания того, какие объекты больше не используются, и это звучит как-то более утомительно, чем переключение на массив указателей?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]