• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > “垃圾回收”之我见

“垃圾回收”之我见

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了“垃圾回收”之我见等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: “垃圾回收”之我见
描述:

http://www.visual-graph.com
我一直搞不懂为什么会出现垃圾回收这种技术。直到最近。
以前我以为自己用标准的ActiveX接口编写的控件一定能够适应不同的编程语言,结果在不同的语言中却发生各种奇怪的现象。
首先,为了让vb能够识别我的类库对象,我的属性类型不能是IDispatch的派生类,而必须是IDispatch,vb才能识别,这样我知道,vb原来是后期绑定,它只对Variant这种变体操作,在运行中解释执行!
这样就让某些使用其它工具的程序员有点小小的不爽,因为必须对对象做一个强制转换才行。但这是一种宿命,没办法,组件开发商必须这么做才能通用,因此,使用组件的程序员就只好将就一下了,好在这也不是什么繁琐的事情,仅仅是有一点点小小的繁琐而已。
有些标准接口,如BSTR(宽字符串)是一定要在ActiveX中创建的(SysAllocString),但你不能释放它,释放是调用者做的事情。所有的编程语言都懂得要用SysFreeString这个函数用来释放你分配的BSTR字符串。所以我们不用担心自己分配的内存会不会造成内存垃圾。
但是,对象就没有这么幸运了!我在ActiveX中建立的对象接口,当它被其他编程语言引用的时候,各种编程语言就开始乱来了!
VC和VB要简单一点,只要在它应用你的对象时,增加这个对象的引用计数(AddRef)就可以了,VC和VB会自动释放它,通过减少一个引用计数(Release)来完成匹配。
Delphi呢?基本上也是这样的,之所以说基本上,是因为在某些特殊的地方它却不会自动减少一个引用计数。这种情况在你引出的对象是一个属性的时候有时候会发生,但我目前还没发现究竟是哪些特殊的情形!(vc里面没有属性的概念)
C++Builder最糟,靠,它绝对不会在引用你的对象之后减少一个引用计数!所以,使用这种语言,引用ActiveX对象的时候,就会出现内存垃圾!
我这里强烈建议使用C++Builder的程序员,当你使用别人的ActiveX控件访问它的对象的时候,你一定要看看内存有没有泄漏!我真的很怀疑!
我的产品是一个ActiveX控件,它要被应用在不同的编程语言中,可是却在C++Builder和Delphi中出现了内存的麻烦,怎么办?
为了对付这个头疼的问题,我决定迁就Microsoft,让我的ActiveX控件在VC和VB中间自如地使用,而不出现内存问题。虽然我的程序是用C++Builder开发的,但我还是觉得Microsoft的产品虽然比较笨,但它确实够标准。Borland为了让程序员高兴,接口中有很多实用化的简单的东西,但却不够标准,只有Borland自己的开发工具能够充分利用这种“非标准化”带来的特殊好处。
于是,我只好在ActiveX编写中添加了自己的“垃圾回收”机制。
C++Builder和Delphi不是不能自如地释放某些对象内存吗?
我便把那些没有释放的内存管理起来(我的程序当然知道哪些对象还没释放),在某些时刻清理一遍。
所幸运的是,由于我的对象特别特别小(每个对象最多只有8字节),这种清理工作,我放到了程序退出的时候进行,应该没有问题了。作为一个程序员,我真的无法容忍任何内存泄漏,哪怕只有几个字节!
呜呼!Microsoft 的.net技术就是为了兼容各种不同的编程语言,所以我怀疑垃圾回收技术的出现就是因为不同公司的编程语言在接口方面出现不兼容问题,欲寻求解决办法而出现的!
是不是这样?我也不敢肯定!
其它内容,请登陆http://www.visual-graph.com
超强新一代图形开发引擎!
张广军


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-05 建线程从USB设备读数据
  • 2017-06-04 关于com注册的问题
  • 2017-06-05 创建一个实现串口通讯功能的Dll文件,然后再新创建一个应用程序使用该Dll文件中函数?初学者
  • 2017-06-05 关于在线程间共享套接字的问题???
  • 2017-06-05 关于VC串口编程CString转化为COleVariant的问题!!!
  • 2017-06-05 高分求助:如何截获父进程或子进程结束信号?
  • 2017-06-05 关于DLL中调用COM的蛋疼问题
  • 2017-06-04 Win32消息机制问题请教?
  • 2017-06-04 请问dcom的实现原理
  • 2017-06-04 ActiveX在IE中调用板卡资源的问题!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • com中参数传递的问题!
    • 关于CComBSTR与char的问题
    • dll用外部程序调试的问题
    • ATL在Debug下链接可以通过,在ReleaseMinSize下就不行,什么原因?错误如下
    • 200分求助,在线结贴,ActiveX控件的窗口句柄被Detach了,导致不能正常使用该控件。
    • 关于在网页中嵌入Activex控件的问题!
    • 使用DragandDrop实现拖拽功能,怎样显示跟随鼠标的图片?
    • 我怎么才能在我的javascript里面调用Com组件,急
    • IE调用OCX使用出现加载故障
    • 求教写过浏览器Band对象的大哥/大姐,请进

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有