说明
AGG采用new/delete函数操作堆内存,有时候并不是最佳的选择。另一方面,STL的内存分配策略太繁琐,因此没有采用。在agg_allocator.h文件中描述目前内存分配策略:
template<class T> struct allocator
{
static T* allocate_array(unsigned size) { return new T [size]; }
static void free_array(T* v, unsigned) { delete [] v; }
};
具体用法如下:
char* array = allocator<char>::allocate_array(size);
allocator<char>::free_array(array);
理解
所有的内存分配都是按照这种方法,没有数组要求对数组元素进行初始化工作。所有的分配数据都是POD类型。POD类型被认为是C语言的结构体,没有携带任何的类的特性,能够轻松的进行memcpy或者strcpy。
可以自定义内存分配器,例如:
template<class T> struct allocator
{
static T* allocate_array(unsigned size)
{
return (T*)malloc(sizeof(T) * size);
}
static void free_array(T* v, unsigned size)
{
if(v) free(v);
}
};
应用场景:创建自定义的超高效堆内存