JavaPtr - Java Like Pointee

访问次数:59
Warning: fopen(access_counter): failed to open stream: Permission denied in /sfroot/home/groups/javaptr/htdocs/index.php on line 33

Warning: fwrite(): supplied argument is not a valid stream resource in /sfroot/home/groups/javaptr/htdocs/index.php on line 34

Warning: fclose(): supplied argument is not a valid stream resource in /sfroot/home/groups/javaptr/htdocs/index.php on line 35

 

版本号: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