某种数据存放在链表中,数量会动态变化,现在要返回全部的这种数据。
每次调用时临时分配一段内存来保存这种数据,需要频繁地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里面都有内存池