我有一个具有 type 字段的类unordered_map
。我在我的应用程序中创建了这个对象的一个实例,它被包装在一个shared_ptr
. 该对象非常消耗内存,我想在使用完它后立即删除它。但是,重置指针只会释放对象占用的一小部分内存。如何强制程序释放对象占用的所有内存?
以下模拟程序重现了我的问题。打印垃圾的 for 循环只是为了给我足够的时间来观察与top
. 析构函数在 之后被调用reset()
。此外,紧接着,使用的内存从大约 2 GB 下降到 1.5 GB。
#include <iostream>
#include <memory>
#include <unordered_map>
using namespace std;
struct A {
~A() {
cerr << "Destructor" << endl;
}
unordered_map<int, int> index;
};
int main() {
shared_ptr<A> a = make_shared<A>();
for (size_t i = 0; i < 50000000; ++i) {
a->index[2*i] = i + 3;
}
// Do some random work.
for (size_t i = 0; i < 3000000; ++i) {
cout << "First" << endl;
}
a.reset();
// More random work.
for (size_t i = 0; i < 3000000; ++i) {
cout << "Second" << endl;
}
}
编译器:g++ 4.6.3。