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

 我来答
手机用户86213
2013-10-25 · 超过53用户采纳过TA的回答
知道答主
回答量:106
采纳率:100%
帮助的人:97.3万
展开全部
各位大侠好: 我现在定义了一个CList类对象m_list,在这个对象里加结构体元素,此结构体存放的为图片数据 typedef struct{BYTE CamIp[4];//相机IP ULONG ImageSize; char filename[MAX_LENGTH]; BYTE JpegData[10000]; }JPEG_ELEMENT 你的元素是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 查看其内存只增不减的问题,是现代编译器普遍采用的一项内存优化策略所导致的,即进程中被释放的内存并不是真正地交给操作系统,而是仍归本进程使用。遇到下一次本进程分配内存的时候优先考虑这块被释放的内存空间,而不必每次都向操作系统提出分配内存的请求,从而可提高内存分配的效率。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式