map容器哪个效率高:指针还是内存池
现在需要用STL容器储存一些数据,对效率有一定要求。数据大小在1K左右。
容器可能采用map或hash_map,但现在不打算讨论这些容器的查找效率。
这里只讨论在容器中添加元素时,以什么方式添加,效率更高。
下面是可能采用的三种方式(伪代码):
1、STL元素+指针
===========================================================================
struct ITEM
{
int a;
int b;
int size;
char *data;
};
map<int, ITEM> DATA;//声明为储存ITEM对象,对实际数据是指针
int main()
{
char *data = new char[1000];//用new分配内存,相对于内存池方式慢了不少
ITEM item;//在栈内存区域构造对象,非常快
DATA.insert(item);//STL分配内存,构造对象,复制对象(浅拷贝,只复制了少数几个int,效率应该有保障)
//最后,栈内存的对象被释放,可以忽略
}
===========================================================================
2、纯指针
===========================================================================
struct ITEM
{
int a;
int b;
int size;
char data[1000];
};
map<int, ITEM*> DATA;//声明为储存指针
int main()
{
ITEM *item = new ITEM;//用new分配内存,相对于内存池方式慢了不少
DATA.insert(item);//STL分配内存,构造对象,复制指针
}
===========================================================================
3、纯STL元素,使用内存池(因STL不支持1K大小的内存池,所以内存池要另外实现)
===========================================================================
struct ITEM
{
int a;
int b;
int size;
char data[1000];
};
map<int, ITEM> DATA;//声明为储存实际对象
int main()
{
ITEM item;//在栈内存区域构造对象,非常快。但该相对包含1K数据
DATA.insert(item);//内存池分配内存,构造对象,复制对象。包含1K数据
//栈内存的对象释放,可以忽略
}
===========================================================================
对象储存后,还有使用时的效率问题,以及删除。
DX觉得哪种方式更好?