hur.cn - 华软网

 热门搜索

向CList类添加结构体元素,内存为什么会一直增大

  作者:未知    来源:网络    更新时间:2011/8/20
各位大侠好:
我现在定义了一个CList类对象m_list,在这个对象里加结构体元素,此结构体存放的为图片数据
typedef struct 
{
BYTE CamIp[4];//相机IP
ULONG ImageSize;
char filename[MAX_LENGTH];
BYTE JpegData[10000];
}JPEG_ELEMENT

现在是没接收到一张图片,我就在表尾添加一个元素,之后取走链表中的一个元素,再将此元素节点删除。奇怪的是为什么程序内存会一直增大,但当增大到200M时就不增加了。
谢谢。

---华软 网友回答---
你的元素是new出来的吗 如果是需要delete掉 然后再将元素节点删除
---华软网友回复---
怎么添加的,怎么删除的,怎么取走节点的?
代码贴一下
---华软网友回复---
可能是内存管理的机理导致的吧,最近被分配的内存可能比再次分配,而不立即释放到内存池中

可以建一个一定长度循环队列,这样一次分配 永久使用,在大内存量使用时优势尤为明显
---华软网友回复---
JPEG_ELEMENT FirstImage,SecondImage;
JPEG_ELEMENT  tempImageElement
元素不是new出来的。

JPEG_ELEMENT tempElement;
g_ComImageList.AddTail(tempImageElement);


---华软网友回复---
list 类的元素是节点存储方式,每删除一个元素,同时会回收这个元素所占有的内存空间。

其成员函数remove,erase,pop_front,pop_back,clear等都会回收被删除元素的内存空间。

至于即使释放内存用 top 查看其内存只增不减的问题,是现代编译器普遍采用的一项内存优化策略所导致的,即进程中被释放的内存并不是真正地交给操作系统,而是仍归本进程使用。遇到下一次本进程分配内存的时候优先考虑这块被释放的内存空间,而不必每次都向操作系统提出分配内存的请求,从而可提高内存分配的效率。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。