简单说说何为之STL的内存管理Allocator
1. 概述
STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物。
STL标准如下介绍Allocator
the STL includes some low-level mechanisms for allocating and deallocating memory. Allocators are very specialized, and you can safely ignore them for almost all purposes. Allocators encapsulate allocation and deallocation of memory. They provide a low-level interface that permits efficient allocation of many small objects; different allocator types represent different schemes for memory management.
将其描述为空间配置器,理由是allocator可以将其它存储介质(例如硬盘)做为stl 容器的存储空间。由于内存是allocator管理的主要部分,因此,本文以STL内存管理为出发点介绍allocator。
Allocator就在我们身边,通常使用STL的.方式:
#include
std::vectorArray(100);
本质上,调用的是:
#include
std::vectorArray(100);
std::allocator就是一个简单的Allocator
2. 使用
针对不同的应用场合,STL中实现了不同的Allocator,如下(gcc-3.4:http://www.cs.huji.ac.il/~etsman/Docs/gcc-3.4-base/libstdc++/html/20_util/allocator.html):
__gnu_cxx::new_allocatorSimply wraps ::operator new and ::operator .
__gnu_cxx::malloc_allocatorSimply wraps malloc and free. There is also a hook for an out-of-memory handler
__gnu_cxx::debug_allocatorA wrapper around an arbitrary allocator A. It passes on slightly increased size requests to A, and uses the extra memory to store size information.
__gnu_cxx::__pool_allocA high-performance, single pool allocator. The reusable memory is shared among identical instantiations of this type.
__gnu_cxx::__mt_allocA high-performance fixed-size allocatorthat was initially developed specifically to suit the needs of multi threaded applications
__gnu_cxx::bitmap_allocato A high-performance allocator that uses a bit-map to keep track of the used and unused memory locations
例如,在多线程环境下,可以使用:
复制代码 代码如下:
#include
#include
std::vector
3.一个简单的Allocator实现
我们可以实现自己的allocator
复制代码 代码如下:
#include
template
class my_allocator : public std::allocator
{
public:
typedef std::allocatorbase_type;
// 必须要重新定义
template
struct rebind
{
typedef my_allocatorother;
};
// 内存的分配与释放可以实现为自定义的算法
pointer allocate(size_type count)
{
return (base_type::allocate(count));
}
void deallocate(pointer ptr, size_type count)
{
base_type::deallocate(ptr, count);
}
// 构造函数
my_allocator()
{}
my_allocator(my_allocatorconst&)
{}
my_allocator& operator=(my_allocatorconst&)
{
return (*this);
}
template
my_allocator(my_allocatorconst&)
{}
template
my_allocator& operator=(my_allocatorconst&)
{
return (*this); }
};
四川高考排名264150左右排位理科可以上哪些大学,具体能上什么大学
江苏城市职业学院在广东高考历年录戎数线(2024届参考)
四川高考排名7250左右排位理科可以上哪些大学,具体能上什么大学
山西高考排名50570左右排位文科可以上哪些大学,具体能上什么大学
广西高考排名141840左右排位文科可以上哪些大学,具体能上什么大学
四川高考排名43030左右排位文科可以上哪些大学,具体能上什么大学
青海高考排名15710左右排位理科可以上哪些大学,具体能上什么大学
辽宁高考排名16520左右排位物理可以上哪些大学,具体能上什么大学
考山东建筑大学要多少分安徽考生 附2024录取名次和最低分
河南高考排名143400左右排位文科可以上哪些大学,具体能上什么大学
山东高考排名130050左右排位综合可以上哪些大学,具体能上什么大学
贵州高考排名1620左右排位文科可以上哪些大学,具体能上什么大学
广东高考排名229560左右排位物理可以上哪些大学,具体能上什么大学
云南高考排名90020左右排位理科可以上哪些大学,具体能上什么大学
嘉应学院的康复治疗技术专业排名怎么样 附历年录戎数线
山东高考排名66920左右排位综合可以上哪些大学,具体能上什么大学
河南高考排名426020左右排位理科可以上哪些大学,具体能上什么大学
甘肃高考排名55800左右排位理科可以上哪些大学,具体能上什么大学
甘肃高考排名37170左右排位理科可以上哪些大学,具体能上什么大学
苏州工业园区服务外包职业学院和西安铁路职业技术学院哪个好 附对比和区
万圣节收到对象糖果发的说说
生日愿望疫情赶快过去的说说(精选50句)
情侣的说说
下雪了发的朋友圈说说(精选80句)
烧烤过后发朋友圈说说
母亲节说说十五篇)
简洁的qq空间心情说说集合90句
想家的说说50句
简洁的流行的心情说说65句
简洁的朋友圈心情说说锦集56句
精选QQ个性说说女生凄美伤心
九月简短说说
一针见血的朋友圈说说
有哪些真爱的说说
充满少女心的说说图片