更好但标准库却不采用的alloc内存分配

本文探讨了C++标准库中容器分配的默认类allocator的工作原理,对比了G2.9版本中采用的不同分配方式,通过具体示例展示了如何在__gnu_cxx命名空间中使用pool_allocator来优化内存分配,减少空间浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在标准库中容器分配的默认类都是

template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
    class vector : protected _Vector_base<_Tp, _Alloc>...

中的allocator类, 这样的类里面分配的内存空间每一个元素都要额外分配内存记录分配内存的大小以及元素所占的字节, 但是容器中的元素大小都是一样的, 因此这样子分配浪费许多空间.
之前在G2.9版本中的分配器采用了不同的分配方式:
在这里插入图片描述
其中的主要思想是:
#0#15的16个bit分别负责对应的字节大小, 比如#0中所指向的已分配的内存每一个都是8个字节, #7则是负责64个字节的大小, 以此类推. (十分具体的还得看侯捷老师的内存管理).

现在的标准库不使用这种方法, 但是还是有保留的, 在ext/pool_allocator.h中.
然后在__gnu_cxx命名空间中.

#include <vector>
#include <iostream>
#include <ext/pool_allocator.h>
using namespace std;
int main()
{
    vector<int, __gnu_cxx::__pool_alloc<int>> v = {1,2,3,4};
    for(auto e : v){
        cout << e << endl;
    }
    return 0;
}

输出:

1
2
3
4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zedjay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值