wince内存系统疑惑。
在CE中运行我的程序,内部随着操作的不同会生成很多的非模对话框,操作完成后
回收内存销毁,肯定自己DELETE了所有的NEW出来的东东,打开系统属性查看内存使用情况,发现即使delete了内存依然是占用那么多!变化量很小,跟创建对话框之前的内存差量很大,100来K。
怀疑时另起一个对话框程序,内只有两个按钮,一个按钮new了一个10000个int类型的元素,另一个按钮delete这个数组。
当按了new出来的按钮看到系统内存增加了40K,很正确,但delete按钮按下去确发现
系统显示的内存依然没减少,这是为什么呀,,请指教。
void test::onbutton1()
{
m_pIntArray = new int[10000];
ASSERT(m_pIntArray);
}
void test::onbutton2()
{
if(NULL != m_pIntArray)
{
delete []m_pIntArray;
}
m_pIntArray = NULL;
}
[解决办法]
只要你创建了对话框,就算你不作处理,消息还是存在的。
[解决办法]
你用delete的时候内存确实是释放了,
但系统不会因为你释放了而马上收回, 它会不定时的自动收回,或者是当系统内存不够的时候,才去收回释放了的。呵呵
[解决办法]
我的测试中VirtualFree以后内存确实增大了,而且分配页面都被释放了。HeapDestroy效果也是一样的。而且,如果你用HeapAlloc分配一个很大的内存快(比如说2MB),HeapFree也会立即把内存释放掉。如果VirtualFree都后内存都不能释放,那这个API肯定和他描述的不符。不知道你是怎么调用VirtualFree的?
[解决办法]
无论简单的代码还是复杂的代码,分配内存都在堆中,所以现象是一致的,你的代码比较复杂,又涉及到类问题,所以应该化简再做判断。