【发布时间】:2019-05-12 11:46:52
【问题描述】:
据我所知,STL 具有自动内存管理功能。但是当我使用top或ps -aux之类的东西来显示进程的内存使用情况时,它表明即使STL对象超出范围,这些内存仍然被进程拥有。
这是一个例子:
void run()
{
map<int, int> a;
for(int i = 0; i < 1000000; i++)
{
a[i] = i;
} // 64376K memory used by process
}
int main()
{
run();
sleep(5); // still 64376 memory used
map<int, int> a;
for(int i = 0; i < 1000000; i++)
{
a[i] = i;
} // still 64376 memory used
return 0;
}
进程在run() 中拥有64376KB 内存,并且在函数run() 之后内存没有释放。但是这些内存好像被第二个map占用了。
我使用valgrind --tool=massif查看发生了什么后,得到了正常的结果。
所以我的问题来了
- 为什么进程内存趋势与代码和
valgrind不匹配 - 不同的 STL 对象如何共享相同的分配内存。
【问题讨论】:
-
1.因为这就是操作系统的工作方式。它们不会立即将内存释放回操作系统,因为它们不能。 2. 他们没有。