【发布时间】:2016-11-28 01:09:12
【问题描述】:
假设我有一个符合 STL(ish)的分配器。我希望 STL 容器 (std::vector) 的多个实例(数百万)使用该分配器的同一实例(我们假设线程安全得到保证)。这个实现会按预期工作吗?
MemoryPool<int> mypool;
std::vector<std::vector<int, MemoryPool<int>>> myvec;
myvec.assign(BIG_NUMBER, std::vector<int, MemoryPool<int>>{1, mydefault, mypool});
我也尝试过:
std::vector<std::vector<int, MemoryPool<int>>> myvec;
myvec.assign(BIG_NUMBER, {mydefault});
...并获得相同的内存使用情况。
问题是我的内存使用量随着这个实现而爆炸。从使用默认分配器的 ~12MB 到使用内存池分配器的 ~4GB。
我假设正在发生的事情是每个向量都获得了我的内存分配器的一个新实例,由于内存池的块大小很大,导致大量浪费存储。我的理由是,如果它们都使用相同的内存池实例,那么内存使用量会更接近默认分配器。
作为参考,我正在使用这个内存池实现:https://github.com/cacay/MemoryPool
【问题讨论】:
标签: c++ memory-management stl