当真正释放STL中的内存时

时间:2015-12-14 14:29:22

标签: c++ stl

STL的分配器使用内存池技术,它只将需要释放的内存添加到空闲列表中,如下所示:

static void deallocate(void* __p, size_t __n)
{
    if (__n > (size_t) _MAX_BYTES)
    malloc_alloc::deallocate(__p, __n);
    else {
        _Obj* __STL_VOLATILE*  __my_free_list = _S_free_list + _S_freelist_index(__n);
        _Obj* __q = (_Obj*)__p;
        __q -> _M_free_list_link = *__my_free_list;
        *__my_free_list = __q;
    }
}

我想知道,什么时候真正免费提供免费清单?

1 个答案:

答案 0 :(得分:1)

无法保证STL使用内存池(尽管很常见)。

这取决于实现(编译器,库,版本,操作系统,机器架构,月亮的阶段)。一个常见的答案是,使用new分配的内存只会在程序退出时返回给操作系统。