• 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-04 com编程出现问题。。。客户端调用CreateInstance时出错。。。。请帮忙解决给200分不够再加
  • 2017-06-04 想问个比较弱智的问题
  • 2017-06-05 谁能给些编写和调用dll的资料??
  • 2017-06-04 如何强制一个MFC控件产生窗口?
  • 2017-06-05 线程同步问题?急
  • 2017-06-05 有SetWindowLongPtr这个函数吗?头文件是什么?
  • 2017-06-05 关于MFC正规dll
  • 2017-06-05 CSocket在多线程里的编程,高手请进,内附程序!!!!!!!!!!
  • 2017-06-04 javascipt是不是不支持variant呀,我都可以送出来,就是取不到
  • 2017-06-05 IWebBrowser逻辑问题

文章分类

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

最近更新的内容

    • 请教,关于搜索引擎原理
    • 请教做IE插件要学什么?
    • MFCDLL中创建一个对话框,调用时出错。
    • 一个多线程的问题!!!!困扰俺一天了,望高手来救救ME
    • 为什么必须在dll工程里调用一次在lib里为此dll定义的输出函数,编译后生成的dll才输出了这个函数???
    • 创建Mscomm控件异常
    • IME输入法设计问题
    • 不安装EXCEL直接用excel9cpp和excel9h不可以吗?
    • VC++Qos限速
    • 各位大侠,ATL设计态运行态的问题

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

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