终于知道微软的东西为什么耗内存了....CString就是一个祸源!

格利高里 格利高里 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近看了一下CString的源代码,看到内存分配的地方FixedAlloc.h/FixedAlloc.cpp
CString为了提高效率,预先分配了一组长度固定的64*(64/128/256/512)的内存块,有意思的是

CFixedAlloc的Alloc()方法申请/分配内存,在FreeAll()函数中释放内存,Free(void* p)释放使用节点,并不回收内存,析构函数中调用FreeAll()释放内存。

CString的内存分配中,定义了CFixedAlloc类型的4个静态变量,并只调用CFixedAlloc的Alloc()、Free(void* p)方法,所以只有内存分配,并没有释放(除非程序退出时)。可见如果一次申请大量CString字符串的话,就算立刻再删除这些CString,内存也不会回收。这样效率虽然高,内存占的可就比较多啦。

一个测试例子
void CTestDlg::OnButtonTest()
{
// TODO: Add your control notification handler code here
CPtrList list(1000);
CString* strMsg;
AfxMessageBox("现在看看内存占用多大?");

for(int i=0;i<50000;i++)
{
strMsg = new CString("1234567890", 20);
list.AddTail(strMsg);
}

AfxMessageBox("生成50000字符串,再看看内存占用多大?");
POSITION pos;
for( pos = list.GetHeadPosition(); pos != NULL; )
{
strMsg = (CString*)list.GetNext( pos );
delete strMsg;
}
list.RemoveAll();
AfxMessageBox("函数结束,字符串也删除了,再看看内存减小了吗?");
}
...全文

相关推荐

CO-043A Released SHIPPING AND HANDLING TRAY FOR LP5 SOCAMM2 MODULE.rar

CO-043A Released SHIPPING AND HANDLING TRAY FOR LP5 SOCAMM2 MODULE.rar

phyit

阴影蜘蛛的判定与处理 vue

阴影蜘蛛的判定与处理 vue

菜C++鸡java

硕士复现燃料电池供氢系统建模及控制策略Simulink仿真(附带说明PPT+参考文献+复现模型+实物源码)

内容概要:本文围绕燃料电池供氢系统的建模与控制策略展开,依托Simulink仿真平台构建了完整的系统动态模型,深入研究了供氢过程的关键动态特性及先进控制方法的设计与实现。内容涵盖系统建模流程、控制策略设计、仿真验证与结果分析,并配套提供详细的说明PPT、参考文献、可复现的仿真模型及实物源码等丰富资源,便于读者系统性地理解与复现研究成果。研究重点在于优化供氢压力、流量与响应速度,提升燃料电池系统的运行效率、稳定性与动态适应能力,对新能源领域的工程实践与学术研究具有重要参考价值。; 适合人群:具备自动化、电气工程、能源动力或控制科学等相关专业背景,正在从事新能源技术、氢能系统或仿真实验研究的硕士研究生、博士生及科研人员。; 使用场景及目标:①掌握燃料电池供氢系统的核心建模方法与Simulink高级仿真技巧;②学习并复现已有先进控制策略,进一步开展系统优化与创新设计;③为撰写高质量学术论文、完成学位课题或工程验证提供完整的理论支持与技术方案。; 阅读建议:建议结合所提供的PPT讲解、参考文献与Simulink模型逐步操作,注重理论分析与仿真实践的深度融合,在仿真过程中主动调试参数、观察动态响应,以深刻理解系统行为与控制机理,最大化学习与研究成效。

抬头望远方

MATLAB代码:比较不同FACTS与可再生能源技术应用遗传算法的研究.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

海神之光

head_model.rar

head_model.rar

繇金融
评论 105
收藏 已收藏
分享
返回顶部
格利高里
VC/MFC 16,550 成员 421,606 内容