STL分配器allocator

分配器为为容器再内存中分配空间。容器的一般默认分配器是 std::allocator ,该分配器是一个类模板。

对内存空间分配的动作(分配器,new,operator new()等)一般最后都会调用malloc() 。malloc() 再根据不同的操作系统调用其底层的API。同理释放内存对应的free()。

malloc(size)分配的内存:

在这里插入图片描述
除了要求的size意外malloc(size)还会在头尾添加一些额外开销(记录整块的大小用于free(),内存对齐等)。所以当size较大时有效内存所占比例大,malloc()的空间使用率更好。

分配器一般含有两个重要的函数allocate() 和deallocate()。用于分配和释放内存。
std::allocator的allocate() 调用operator new() ,而operator new() 又调用malloc() 。deallocate() 调用operator delete() ,operator delete()再调用free()。并没有做其余优化。它对容器中每一个元素都调用一次malloc()。

GNU 2.9中std容器使用的分配器为:alloc

每次malloc(size)一块较大的内存,再将其切割成许多大小不同的小块给容器中每个元素使用,减少malloc() 次数,从而降低额外开销(额外开销只在malloc()时产生)
在这里插入图片描述
在这里插入图片描述
但是GNU 4.9中std容器使用的分配器为std::allocator
其为容器内每一个元素分配内存最终都要调用malloc()。(为什么不用alloc了?可能有缺陷?)
GNU4.9中之前的alloc还在,被改名为__pool_alloc。使用方法:vector<int, __gnu_cxx::__pool_alloc > v;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值