在我的VM(2gb)中运行此代码我在A点和B点消耗了大约40%的ram。在C点,无论我使用shrink_to_fit还是myresize内存,跳转到ram的79%。在C点,我想给操作系统带回一些内存。我最担心的是79%(而不是40%)我可以运行应用程序并让linux终止这个应用程序以使用太多内存。
如何将可用内存回馈给linux OS?
#include <cstdio>
#include <deque>
#include <unistd.h>
using namespace std;
typedef unsigned int u32;
typedef unsigned long long u64;
void myresize(deque<u64>&a) {
a.shrink_to_fit(); return;
deque<u64> b;
for(auto i = a.begin(); i!=a.end(); ++i){
b.push_back(*i);
}
a.swap(b);
}
int main(int argc, char **argv) {
deque<u64> a;
for(int i=0; i<100000000; ++i)
a.push_back(i);
printf("A\n");
sleep(2);
for(int i=0; i<100000; ++i)
a.erase(a.begin()+i*3);
printf("B\n");
sleep(2);
myresize(a);
printf("C\n");
sleep(5);
return 0;
}