CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  硬件/嵌入开发 >  嵌入开发(WinCE)

winCE对内存的管理是不是有问题啊?请高手指点内存回收问题

楼主questionboy(我行我素)2005-04-01 13:49:49 在 硬件/嵌入开发 / 嵌入开发(WinCE) 提问

为什么用new分配了内存,使用完毕以后delete掉了,可是只要进程不退出,那么该内存就好像没有被释放,内存越用越少,必须退出进程,所有的内存才算真正的释放掉了,这不是见鬼吗?那位高手能给些指点?是不是wince对内存的管理太差了? 问题点数:100、回复次数:15Top

1 楼91program(当时明月在,曾照彩云归)回复于 2005-04-01 22:26:54 得分 5

这怎么可能?楼主如何得出上述结论的?Top

2 楼jiess(刘伟庭)回复于 2005-04-01 22:44:21 得分 5

是啊,我想应当是有些内存没用delete,或是有些系统资忘了释放或是释放时,资源正在使用,所以释放失败了吧.  
  如果程序是用.net写的话可能不会马上给释放,因为它是属于一种内存回收机制.Top

3 楼nbcool(载舟之水)回复于 2005-04-01 23:01:38 得分 5

不知道你是如何统计的,应该是你用法的问题。Top

4 楼wangshiqi(钾肥)回复于 2005-04-02 11:17:10 得分 5

jiess说得不错,在delete一个对象时,看看有没有需要release的.  
  另外,看看是不是有些地方该用   delete   [],而你用了deleteTop

5 楼slyzhang(http://blog.csdn.net/group/slyzhang/)回复于 2005-04-03 13:54:50 得分 5

wince   下的内存管理应该是比较严密的。。不应该出现什么问题的。仔细检查了。。。。Top

6 楼MrFool(笨笨先生)回复于 2005-04-03 15:07:30 得分 5

楼主还是先用codesnitch这种软件检查一下自己的程序有没有内存泄漏吧Top

7 楼questionboy(我行我素)回复于 2005-04-04 09:28:52 得分 0

非常感謝各位的指點,我知道一定會得到類似的批評,所以其實我也很懷疑自己的程序有問題,我這個結論的得出也是基於工具codesnitch::procman的,而且內存絕對沒有洩漏,因為整個應用程序退出則所有的內存恢復到初始值,但是只要在進程中,就會出現我說的怪問題,new   something,   do   something,   delete,內存大小并沒有恢復到new之前的大小,由於工程比較龐大,查起來還真的是有點難度,謝謝各位了,我再看看Top

8 楼questionboy(我行我素)回复于 2005-04-04 09:32:56 得分 0

忘了說自己的工作環境,EVC   4.0   +   SP4,   PocketPC   2003,   GAPI,   WinCE5.0下面的一個庫IImagingTop

9 楼91program(当时明月在,曾照彩云归)回复于 2005-04-04 12:50:30 得分 40

做个实验:  
  将内存申请的大小加大,重复执行  
  看看是否出现死机现象?Top

10 楼questionboy(我行我素)回复于 2005-04-04 14:34:03 得分 0

#include   <vector>  
  using   namespace   std;  
  vector<int*>   g_vec;  
   
  void   ClearVec()  
  {  
  for(   unsigned   long   l=0;   l<g_vec.size();   ++l   )  
  delete   g_vec[l];  
  g_vec.clear();  
  }  
   
  void   FillVec()  
  {  
  int   n   =   Random()%100;  
  for(   int   i=0;   i<n;   ++i   )  
  g_vec.push_back(   new   int(0)   );  
  TCHAR   ch[32];  
  _stprintf(   ch,   TEXT("vec's   length=%ld\n"),   g_vec.size()   );  
  OutputDebugString(   ch   );  
  }  
  以上是一个很简单的测试,WCE   Pocket   2003   Application,   鼠标左键点击则随机创建一些指针添加到数组中,右键点击则清空数组,最后退出程序的时候也会做清空的动作,数组为全局变量,使用Entrek::ProcMan检测内存的状态,发现剩余内存(Available   pragram   memory)永远都在减少,清空数组的动作根本不能使其恢复原始的状态,但是在下次分配内存的时候,如果分配的数量没有达到上次清空前的最大值,则数字无变化,也就是说,内存永远保持被使用的最大状态,为什么?我相信自己的程序没有错,因为这实在是太简单了,如果错了我就去自杀算了。我使用的是Entrek--ToolBox的试用版本,难道是这个工具搞错了?整个进程退出后,所有内存恢复正常,真是见鬼啊!Top

11 楼yzx0023(无聊客)回复于 2005-04-04 15:25:20 得分 0

void   ClearVec()  
  {  
  for(   unsigned   long   l=0;   l<g_vec.size();   ++l   )  
  delete   g_vec[l];  
  g_vec.clear();  
  }  
   
  void   FillVec()  
  {  
  int   n   =   100;  
  int   iSize   =   Random()%1000000;  
  for(   int   i=0;   i<n;   ++i   )  
  g_vec.push_back(   new   int[iSize]   );  
  TCHAR   ch[32];  
  _stprintf(   ch,   TEXT("vec's   length=%ld\n"),   g_vec.size()   );  
  OutputDebugString(   ch   );  
  }  
   
  你再看看结果Top

12 楼yzx0023(无聊客)回复于 2005-04-04 15:26:43 得分 0

int   iSize   =   Random()%100000;  
  你把iSize调小点,memory小的机器还抗不住  
  Top

13 楼questionboy(我行我素)回复于 2005-04-04 16:45:37 得分 0

這種類似的測試已經做過了,沒用,算了,不煩了,由他去吧,反正我可以肯定自己的程序沒有內存洩漏Top

14 楼91program(当时明月在,曾照彩云归)回复于 2005-04-04 21:19:57 得分 30

楼主说测试没有用,最证明内存管理没有问题。  
  至于问题出在哪,不好说:  
  (1)程序有问题  
  (2)得出内存不能被回收的方法不正确。  
   
  一般的程序员总是说自己的程序没有问题,直到问题被发现,哈哈......Top

15 楼questionboy(我行我素)回复于 2005-04-06 16:56:49 得分 0

其實這個道理我懂,可是是在找不出原因,使用工具也沒效果,只好如此了.我相信絕大多數情況下,系統遠比我們強大和聰明的多,有可能是方法不得檔Top

相关问题

  • JAVA内存回收问题
  • 内存回收问题
  • tomcat 内存回收问题
  • tomcat 内存回收问题
  • 内存问题--回收再利用?
  • 关于内存回收的问题。
  • CMap能不能自动回收内存
  • .net内存回收问题探讨
  • java回收内存的方法
  • 救命呀。内存回收的问题

关键词

  • 内存
  • wince
  • 释放
  • 问题
  • 程序
  • 看看
  • 退出
  • 大小
  • delete
  • 应该

得分解答快速导航

  • 帖主:questionboy
  • 91program
  • jiess
  • nbcool
  • wangshiqi
  • slyzhang
  • MrFool
  • 91program
  • 91program

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo