【发布时间】:2020-05-01 00:32:15
【问题描述】:
我有一个非常大的向量,如下所示。
vector<vector<int>> a(100000, vector<int>(100000);
// do some work using a here
......
工作完成后,我使用
vector<vector<int>>().swap(a);
为了释放“a”使用的内存立即。我加了
sleep(100)
交换后使用“top”命令查看内存使用是否立即减少。但我观察到什么都没有改变。这里发生了什么?
【问题讨论】:
-
它不起作用的具体症状是什么?你在测量什么来看看它是否有效?
-
你是如何测量内存的?无法保证 C/C++ 会将虚拟内存返回给操作系统,或者在操作系统认为该内存不活动之前多长时间。
-
内存被释放。如果您声称不是这样,请不要期望立即在任务管理器中看到它。
-
@yicepeh969 正如已经指出的那样,任务管理器中显示的信息反映了操作系统关于您正在运行的进程的信息。
std::vector默认使用的内存分配类型(new和delete)通常由进程内的运行时层处理,而不是由操作系统直接处理。仅仅因为您将一堆内存返回给new和delete在下面使用的内存分配器并不意味着内存分配器也将它返回给操作系统。这只是意味着内存分配器可能会在您下次分配某些东西时再次开始分配此内存的位...... -
here 回答了一个类似的问题 - 我无法立即找到更好的副本,但它比评论更详细。
标签: c++ gcc optimization memory vector