某种数据存放在链表中,数量会动态变化,现在要返回全部的这种数据。
每次调用时临时分配一段内存来保存这种数据,需要频繁地new和delete.
问一下这样使用会不会造成内存碎片呢?
假如会的话有什么方法来避免?(不想使用固定大小的空间来存储)
每次调用时临时分配一段内存来保存这种数据,需要频繁地new和delete.
问一下这样使用会不会造成内存碎片呢?
假如会的话有什么方法来避免?(不想使用固定大小的空间来存储)
int CStation::getYKAllowPoints(TYKAllowOrNotPoint **outPoints, int *nOutNum)
{
int nNum=0;
m_pYKAllowForbid->getCountFromAllowTable(&nNum); //获取记录个数
if (nNum>0)
{
if (m_pYKAllowData==NULL)
{
delete m_pYKAllowData;
}
m_pYKAllowData = new TYKAllow[nNum];//分配的空间存在类的成员变量中,TYKAllow自定义结构体
m_pYKAllowForbid->getDataFromAllowTable(m_pYKAllowData);//获取数据
*outPoints = m_pYKAllowData;//返回数据指针,函数调用方可以用"m_pYKAllowData[0]->XXX"使用数据
*nOutNum = nNum;
}
else
{
*outPoints = NULL;
*nOutNum = nNum;
}
return nNum;
}
解决方案
10
内存池………………………………
10
会
使用malloc、realloc、free
使用malloc、realloc、free
25
这里有说明:
http://bbs.csdn.net/topics/50191898
http://bbs.csdn.net/topics/300260894
http://bbs.csdn.net/topics/50191898
http://bbs.csdn.net/topics/300260894
30
碎片有,但是碎片的大小不会计算在你程序使用的内存中的。
对于长期运行的程序来说, 尽量会内存池吧, 动态申请内存肯定会存在内存碎片的, 最终导致系统有内存却分配不到的情况.
对于长期运行的程序来说, 尽量会内存池吧, 动态申请内存肯定会存在内存碎片的, 最终导致系统有内存却分配不到的情况.
20
现在内存碎片问题并不像过去(其实是很久以前,以及某些特殊环境下)那么严重,普通的程序完全没必要担心内存碎片的问题。
30
会!
可以使用内存池(如STL中就如此解决)
可以本人参照写一个,boost中也有一些分配器,可直接拿来用
可以使用内存池(如STL中就如此解决)
可以本人参照写一个,boost中也有一些分配器,可直接拿来用
5
STL、Boost、loki里面都有内存池