找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 8986|回复: 7

关于ACE内存泄露的疑问

[复制链接]
发表于 2012-7-5 17:54:46 | 显示全部楼层 |阅读模式
config.h文件
#define ACE_HAS_STANDARD_CPP_LIBRARY 1 //!<用于标准C++跨平台
#define ACE_HAS_MFC   1
#include "ace/config-win32.h" //!<在WIN32环境下使用ACE
编译出的aced.lib与aced.dll

我在win7里,基于vs2010的MFC
我就调用了ACE::init();    ACE::fini();
Detected memory leaks!
Dumping objects ->
{24623} normal block at 0x021D7290, 44 bytes long.
Data: <      s         > 00 00 00 00 F8 ED 73 00 FF FF FF FF 00 00 00 00
{24622} normal block at 0x021D7CA0, 28 bytes long.
Data: <8 v             > 38 B2 76 00 FF FF FF FF 00 00 00 00 00 00 00 00
Object dump complete.
The program '[27332] CenterServer.exe: Native' has exited with code 0 (0x0).

要是我把ACE::init();    ACE::fini();注释掉,就没有内存错误,这是为什么,难道ACE内部有问题?

 楼主| 发表于 2012-7-6 06:36:35 | 显示全部楼层
软件运行了5个小时了,通过6个客户端不断地向服务器发送消息,服务器端接收并处理消息(输出到自带的output窗口中),没有发现内存有增加的情况.但关闭软件运行,vs2010输出窗口上就会出现内存leak的问题,难道这是ACE的通病?我查了相关资料,
1)网上有人说这是因为MFC里对new,和delete重载的问题
2)也有人说这是ACE与MFC字符解释的问题.
到底是什么问题导致的呢?
这是为什么呢?
发表于 2012-7-6 16:42:34 | 显示全部楼层
99%的估计,还是你程序有问题。
ACE的代码,可靠性非常高,因为有大量的人用,每天都有自动的回归测试。但为何还会有内存泄漏?

其实因为C++语言的问题,还有OS的设计缺陷,导致一些情况下,很难避免一次性的内存泄漏,注意是一次性的。但程序结束的时候,会自动的全部回收,实质上并不影响用户的使用和软件质量。只要避免产生持续不断的内存泄漏就可以接收了。

对于反复产生的内存泄漏,如果难以查到根源,建议使用工具来测试,比较方便和快速。
 楼主| 发表于 2012-7-8 17:27:55 | 显示全部楼层
winston 发表于 2012-7-6 16:42
99%的估计,还是你程序有问题。
ACE的代码,可靠性非常高,因为有大量的人用,每天都有自动的回归测试。但 ...

你好,管理员,要是这样的话,我是否可以这样理解:一次性的内存泄露不会使操作系统出问题?因为可能这个软件一开就是半年或1年不重启.
发表于 2012-7-8 23:35:38 | 显示全部楼层
独来读网 发表于 2012-7-8 17:27
你好,管理员,要是这样的话,我是否可以这样理解:一次性的内存泄露不会使操作系统出问题?因为可能这个软件 ...

只要不是一次性干掉系统的大量内存,一点点不会有问题。看过windows开发历史就会明白,OS自己经常都有问题,很多都是迁就原来的错误、妥协造成的。
发表于 2012-10-22 16:03:09 | 显示全部楼层
我也刚写了一个程序  也很简单 跟楼主的一样,运行时没有内存错误,退出时也有内存错误。
后来照着PurenessScopeServer项目的配置,配置了一下就好了,运行退出都没有内存错误了。
建议楼主去看看PurenessScopeServer项目。
发表于 2012-11-15 06:17:04 | 显示全部楼层
Sometimes there's no way to clean the memory perfectly  when you get lots of static and singleton members  involved.No need to worry about code like below, however it's bad practice.
void main()
{
  char * Imok=new char[10000];
}
发表于 2013-2-11 23:45:20 | 显示全部楼层
版主应该建立一个经典错误置顶帖。以后这些问题就不会重复出现了。嘿嘿:lol:lol
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-4 01:30 , Processed in 0.018112 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表