JavaPtr - Java Like Pointee |
访问次数:59 |
| |
版本号:1.0 日期:2002.09.06 版权所有(C)2000,2002 Larrin/luofeng/罗锋
|
|
下载 | 下载次数 |
1.JavaPtr for vc6 on win32 源代码 | 21 |
| |
JavaPtr许可证 Java Like Pointee 在遵循通用公共许可证GPL的条件下可以用于任何评估、教学、商业目的。非常希望得到您的建议。 |
|
JavaPtr简介
JavaPtr是Java Like Pointee的简称。JavaPtr的目的是使C++程序员能象Java程序员一样使用动态内存 -- 分配,使用,忘掉。 根据统计数据,在C++项目开发中,为解决内存错误花费的时间,往往占到总调试的30%左右。根据我自己的经验,用C++开发时,由指针引起的错误经常是很难定位和排除的。 我本人用Java写的程序很有限,但是每次用Java(或C#)写程序时,需要内存就分配,用完就忘记它,总有一种解脱的感觉。我想如果C++也能这样就好了。在我用Java写程序的时候,我总有一种感觉 -- 拿在我手中的一个对象,并不是一个真正的对象,它只是一个实际被使用的对象(称为物理对象)的一个引用,或者说是一个壳。 如: Object aObj = new Object; 在我看来,aObj只不过是通过new这个操作分配的物理对象的一个客户代理,这个物理对象具有Object类所有的特点 -- 方法(行为方式)和数据。aObj是这个物理对象在我面前(程序员)代理,我通过它来使用这个幕后物理对象。
在这种情况下,有两个问题要解决 1) 对物理对象的引用计数,这关系到物理对象的生命期, 2) aObj必须能够提供物理对象的所有类型信息。 这只是我的看法,实际情况可能根本不是这样的 -- Java使用的是垃圾收集机制。但是这个想法促成了JavaPtr的出现。 基于上面的原因,JavaPtr与大家早已经熟悉的SmartPtr是有很大区别的:JavaPtr在内部,由bmm - basic memory manger提供内存管理和引用计数机制,对外,通过C++的template机制提供被包装的对象的类型信息。与SmartPtr另一个显著不同的地方是,大部分SmartPtr的实现都会明确的指出 -- 不支持数组对象,而JavaPtr不仅指针C++的基本数据类型,单个对象,同时支持对象数组。 总体上说,我认为不论是JavaPtr还是SmartPtr或者是std::auto_ptr,实际上都是将堆上对象的生命期托付给一个栈上的对象,由于栈上的对象总会被回收,那么堆上的对象也就不会泄漏了。 下面就是JavaPtr的效率问题了,根据我的测试,JavaPtr分配十分内存的速度比C++原生new/delete要快20%左右,这要归功与bmm的有力支持(如果直接使用bmm进行内存分配释放,效率比new/delete要快30-40%)。 这个图是在PIII866/256MB机器上做的一个性能对比测试。绿色代表用bmm分配/释放内存的效率,红色代表JavaPtr的效率(每秒分配/释放册次数),另外两条线分配是malloc/free和new/delete的效率。
|
|
下载 | 下载次数 |
1.JavaPtr for vc6 on win32 源代码 | 21 |