std :: unordered_map析构函数不释放内存?

按照标准,当调用std :: unordered_map的析构函数时(例如,当它离开创建它的作用域时),人们希望释放它分配的内存。但是我在多台计算机上运行的一个简单实验似乎与此冲突?考虑以下程序:

    #include <chrono>
    #include <iostream>
    #include <map>
    #include <unordered_map>
    #include <memory>
    #include <thread>
    #include <vector>

    void CreateMap() {
        std::unordered_map<int, int> testMap;

        for (int i=0; i < 10000000; i++) {
            testMap[i] = 5;
        }

        std::cout << "finished building map" << std::endl;

        std::this_thread::sleep_for (std::chrono::seconds(15));

        std::cout << "about to exit from CreateMap()" << std::endl;
    }

    int main()
    {
        CreateMap();

        CreateMap(); 

        CreateMap();
    while (true) {
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    return 0;
}

在我的机器上,地图构建完成后消耗了10%的RAM,但是我们最后在CreateMap()中入睡。但是,退出RAM后仅下降到8%(一个人可以使用各种大小的地图来显示地图本身所占的比例超过2%),所以有人会认为CreateMap会泄漏内存吗?但是,对CreateMap()的3次调用或仅1次调用似乎没有什么区别(因此将内存回收到程序而不是RAM?)。

这可能是我不了解的有关OS内存管理的奇怪事情,即某个程序有可能释放内存以供将来自己使用(将来的分配),而不是释放给OS(即其他程序中的内存分配) )?

评论