在C ++中存储unordered_map中的指针

时间:2013-11-14 09:45:57

标签: c++ pointers memory map 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替换为unordered_map到指针tr1::unordered_map<int, ContainerA*>

这对我来说似乎是一个好主意,但是在做了一些研究之后,我觉得这种方法并不常见,这就是为什么我想知道我是否遗漏了什么。

除了指针的额外内存开销外,这种方法还有什么缺点吗?

编辑: 正如下面的评论所指出的,问题可能在于我的内存分配。我按如下方式分配内存: 我使用其构造函数ContainerA构造了一个ContainerA obja(int* type, int test)对象。在此阶段,ContainerA构造函数允许objectB数组和vector<int>数组默认构造。

构建我的ContainerA后,我的所有vector<int>objectB都需要在堆上分配一些内存。这可能是一个耗时的阶段。

可能有可能避免在不使用unordered_map指针的情况下释放和重新分配内存,而是按照建议简单地交换内存内容。但是,我需要有某种方法来跟踪哪些对象不再使用,这听起来比切换到指针数组更乏味?

0 个答案:

没有答案