5409|13

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

和大家探讨一下WINCE中内存管理的问题及使用STL的困惑 [复制链接]

以前是做PC上的程序,刚转过来做手机端程序.

以前用new, delete 从来没有担心过内存碎片的问题.

这次做了个项目,用了STL,感觉到内存增长很快.

后来查了一下,STL中都是用new开辟了内存.

所以在想是否因为过多的new 和delete 引起内存碎片太多,而引起内存直线上升.

也不知道,这样想对不对,有没有什么方法来解决WINCE中内存碎片的问题.

最新回复

试一试重载new delete 即 placement new/delete  详情 回复 发表于 2008-10-10 17:24
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
WinCE的内存管理和PC下的windows是有很大的不同,而且一般情况下,它能使用的内存资源十分有限,所以STL其实并不是很适合使用。
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
STL用起来比较爽,但比较耗内存。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
开发嵌入式的程序,千万避免使用类似于STL,MFC这一类的库,这些库本身是好的,通用的,但是记住一点,越通用的东西,效率越低,消耗的内存越高,而这是开发嵌入式最要避免的情况,所以要开发出真正属于嵌入式的东西,就不要用这些通用的类库。
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

5
 
是有道理,不过要自己全部去弄那些数据结构太麻烦,而且做出来的东西也不一定比STL的效率高.

而现在的关键是用都已经用了,要改恐怕也来不及了.

不知道有没有什么方法可以改善一下内存碎片的问题?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
那少用NEW和DELETE吧,用malloc和free试试看吧
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
new、delete应该没有问题吧

Windows CE .NET 高级内存管理
http://www.microsoft.com/china/MSDN/library/windev/WindowsCE/WCEdncenetadvmemmgmt.mspx?mfr=true
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

8
 
补充一下,楼主你用到STL是什么版本的?看看这个
http://www.syncdata.it/stlce/index.html
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
欢迎访问www.chinadacs.cn
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
new delete 之后 虽然内存会增加,但是不会影响程序的运行. 这个来说不应该是内存碎片问题吧,还是可以用的
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 
我也遇到了这样的问题。
char **ppBuf = 0;
TRACEMEM( _T("before test new & delete") ); //跟踪内存变化
ppBuf = new char*[ 1024 ];
for ( int i = 0; i < 1024; i++ )
{
        ppBuf = ::new char[1024];
        strcpy( ppBuf, "abcdefg" );
}

for ( int i = 0; i < 1024; i++ )
{
        ::delete ppBuf;
}
delete ppBuf;
TRACEMEM( _T("after test new & delete") );

上面这段代码会泄漏 1M 内存
无论是否在 new 和 delete 的前面加"::"都会
但是如果是在 new 之后直接 delete 则可以释放掉
比如
char *p = new char[ 1024 * 1024 ];
delete p;
p = 0;
这样就不会有问题。

我现在的解决办法是用一个固定大小的数组,并且是全局或者是类成员的。
比如把
char *p = new char[ 1024 * 1024 ];
改成
char g_aBuf[ 1024 * 1024 ] = { 0 };
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

12
 
还有一点,使用 STL 或 CreateFile、WriteFile 等写文件时也发现有内存泄漏。
改用 CreateFileForMapping, CreateMapping 等以文件内存映射的方式就没有这个问题了。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

13
 
  选择合适的容器类型会有点改善吧.
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

14
 
试一试重载new delete 即 placement new/delete
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表