社区
ATL
帖子详情
引用计数,COM,进程,共享???
xiaoqiqixiao
2004-01-05 01:15:07
对COM实在还有许多不理解的地方:
我知道一般的DLL中的数据成员是属于调用DLL的进程的,每个调用DLL的进程互不干扰,都保有各自的一份数据,如果想共享数据,还是一件挺麻烦的事。
那么COM又是怎样的呢?
COM中有个引用计数,一般好象是m_dwRef吧
那么如果COM也象其它的DLL一样,每个调用它的进程都保有各自的数据的话,这个引用计数又有什么用呢,引用计数应该也是内部变量吧,这里应该有个共享的机制在吧,实在是很搞不清啊,有没有知道的啊?
...全文
69
5
打赏
收藏
引用计数,COM,进程,共享???
对COM实在还有许多不理解的地方: 我知道一般的DLL中的数据成员是属于调用DLL的进程的,每个调用DLL的进程互不干扰,都保有各自的一份数据,如果想共享数据,还是一件挺麻烦的事。 那么COM又是怎样的呢? COM中有个引用计数,一般好象是m_dwRef吧 那么如果COM也象其它的DLL一样,每个调用它的进程都保有各自的数据的话,这个引用计数又有什么用呢,引用计数应该也是内部变量吧,这里应该有个共享的机制在吧,实在是很搞不清啊,有没有知道的啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zylstudy
2004-01-05
打赏
举报
回复
呵呵..你要搞清引用计数是在那使用的?是在客户端,它只控制COM在该客户端的生命期.而到了另一个客户端使用它的时候,需要另外的引用计数.当引用计数不为0的时候COM对象就在内存里.在你上面说的,我想就算在COM中也同样不会是5的.至于你楼上说的,我依然还是不明白你说的是什么:PPP
xiaoqiqixiao
2004-01-05
打赏
举报
回复
其实结了贴,才发现,还是没弄通啊,建立一个对象实例,是在内存中新增加了一份代码和数据,还是就是用简单的加了一个引用计数,还是象一般的DLL一样仅仅增加数据,但共用代码呢。
xiaoqiqixiao
2004-01-05
打赏
举报
回复
呵呵,抱歉,抱歉,居然把接口和对象给搞混了
引用计数是针对每个对象来讲,每个对象都有它自己的引用计数,
所以不同的程序调用COM,只是另外建立了一个对象实例,当然引用计数也是自己的了
菩提本无树,
只是自己蠢!
xiaoqiqixiao
2004-01-05
打赏
举报
回复
不是的,可能是比较难理解,所以一我还说了一般的DLL
一般的DLL中,我们会发现,你定义一个内部变量int m_nCount;
并向外export两个函数int GetCount(){return m_nCount;}
和void SetCount(int nCount){m_nCount = nCount;}
假设有一个程序A,它先调用了该DLL,并SetCount(5);
同时有另一个程序B,它然后也调用了该DLL,并int n = GetCount();
我们会发现,得到的n其实并不是5,因为它们是在不同的进程空间中
所以我想知道COM(就我所知,也象个DLL吧)中的引用计数m_nRef它是怎么避免这个问题的
zylstudy
2004-01-05
打赏
举报
回复
1.需要明白什么是静态连接和动态链接.
2.COM是属于动态链接,引用计数是用来什么时候将组件从内存中卸载的(当然还有对类厂的计数)
3.至于你的共享机制,我不知道你说的是什么
《Android系统源代码情景分析》
《Android系统源代码情景分析》随书光盘内容(源代码) 目录如下: 第1篇 初识Android系统 第1章 准备知识 1.1 Linux内核参考书籍 1.2 Android应用程序参考书籍 1.3 下载、编译和运行Android源代码 1.3.1 下载Android源代码 1.3.2 编译Android源代码 1.3.3 运行Android模拟器 1.4 下载、编译和运行Android内核源代码 1.4.1 下载Android内核源代码 1.4.2 编译Android内核源代码 1.4.3 运行Android模拟器 1.5 开发第一个Android应用程序 1.6 单独编译和打包Android应用程序模块 1.6.1 导入单独编译模块的mmm命令 1.6.2 单独编译Android应用程序模块 1.6.3 重新打包Android系统镜像文件 第2章 硬件抽象层 2.1 开发Android硬件驱动程序 2.1.1 实现内核驱动程序模块 2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件抽象层模块编写规范 2.3.2 编写硬件抽象层模块接口 2.3.3 硬件抽象层模块的加载过程 2.3.4 处理硬件设备访问权限问题 2.4 开发Android硬件访问服务 2.4.1 定义硬件访问服务接口 2.4.2 实现硬件访问服务 2.4.3 实现硬件访问服务的JNI方法 2.4.4 启动硬件访问服务 2.5 开发Android应用程序来使用硬件访问服务 第3章 智能指针 3.1 轻量级指针 3.1.1 实现原理分析 3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2篇 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 Logger日志驱动程序 4.2.1 基础数据结构 4.2.2 日志设备的初始化过程 4.2.3 日志设备文件的打开过程 4.2.4 日志记录的读取过程 4.2.5 日志记录的写入过程 4.3 运行时库层日志库 4.4 C/C++日志写入接口 4.5 Java日志写入接口 4.6 Logcat工具分析 4.6.1 相关数据结构 4.6.2 初始化过程 4.6.3 日志记录的读取过程 4.6.4 日志记录的输出过程 第5章 Binder
进程
间通信系统 5.1 Binder驱动程序 5.1.1 基础数据结构 5.1.2 Binder设备的初始化过程 5.1.3 Binder设备文件的打开过程 5.1.4 Binder设备文件的内存映射过程 5.1.5 内核缓冲区管理 5.2 Binder
进程
间通信库 5.3 Binder
进程
间通信应用实例 5.4 Binder对象
引用
计数
技术 5.4.1 Binder本地对象的生命周期 5.4.2 Binder实体对象的生命周期 5.4.3 Binder
引用
对象的生命周期 5.4.4 Binder代理对象的生命周期 5.5 Binder对象死亡通知机制 5.5.1 注册死亡接收通知 5.5.2 发送死亡接收通知 5.5.3 注销死亡接收通知 5.6 Service Manager的启动过程 5.6.1 打开和映射Binder设备文件 5.6.2 注册为Binder上下文管理者 5.6.3 循环等待Client
进程
请求 5.7 Service Manager代理对象的获取过程 5.8 Service组件的启动过程 5.8.1 注册Service组件 5.8.2 启动Binder线程池 5.9 Service代理对象的获取过程 5.10 Binder
进程
间通信机制的Java接口 5.10.1 Service Manager的Java代理对象的获取过程 5.10.2 Java服务接口的定义和解析 5.10.3 Java服务的启动过程 5.10.4 Java服务代理对象的获取过程 5.10.5 Java服务的调用过程 第6章 Ashmem匿名
共享
内存系统 6.1 Ashmem驱动程序 6.1.1 基础数据结构 6.1.2 匿名
共享
内存设备的初始化过程 6.1.3 匿名
共享
内存设备文件的打开过程 6.1.4 匿名
共享
内存设备文件的内存映射过程 6.1.5 匿名
共享
内存块的锁定和解锁过程 6.1.6 匿名
共享
内存块的回收过程 6.2 运行时库cutils的匿名
共享
内存访问接口 6.3 匿名
共享
内存的C++访问接口 6.3.1 MemoryHeapBase 6.3.2 MemoryBase 6.3.3 应用实例 6.4 匿名
共享
内存的Java访问接口 6.4.1 MemoryFile 6.4.2 应用实例 6.5 匿名
共享
内存的
共享
原理 第3篇 Android应用程序框架 第7章 Activity组件的启动过程 7.1 Activity组件应用实例 7.2 根Activity组件的启动过程 7.3 子Activity组件在
进程
内的启动过程 7.4 子Activity组件在新
进程
中的启动过程 第8章 Service组件的启动过程 8.1 Service组件应用实例 8.2 Service组件在新
进程
中的启动过程 8.3 Service组件在
进程
内的绑定过程 第9章 Android系统广播机制 9.1 广播机制应用实例 9.2 广播接收者的注册过程 9.3 广播的发送过程 第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用实例 10.1.1 ArticlesProvider 10.1.2 Article 10.2 Content Provider组件的启动过程 10.3 Content Provider组件的数据
共享
原理 10.3.1 数据
共享
模型 10.3.2 数据传输过程 10.4 Content Provider组件的数据更新通知机制 10.4.1 注册内容观察者 10.4.2 发送数据更新通知 第11章 Zygote和System
进程
的启动过程 11.1 Zygote
进程
的启动脚本 11.2 Zygote
进程
的启动过程 11.3 System
进程
的启动过程 第12章 Android应用程序
进程
的启动过程 12.1 应用程序
进程
的创建过程 12.2 Binder线程池的启动过程 12.3 消息循环的创建过程 第13章 Android应用程序的消息处理机制 13.1 创建线程消息队列 13.2 线程消息循环过程 13.3 线程消息发送过程 13.4 线程消息处理过程 第14章 Android应用程序的键盘消息处理机制 14.1 键盘消息处理模型 14.2 InputManager的启动过程 14.2.1 创建InputManager 14.2.2 启动InputManager 14.2.3 启动InputDispatcher 14.2.4 启动InputReader 14.3 InputChannel的注册过程 14.3.1 创建InputChannel 14.3.2 注册Server端InputChannel 14.3.3 注册系统当前激活的应用程序窗口 14.3.4 注册Client端InputChannel 14.4 键盘消息的分发过程 14.4.1 InputReader获得键盘事件 14.4.2 InputDispatcher分发键盘事件 14.4.3 系统当前激活的应用程序窗口获得键盘消息 14.4.4 InputDispatcher获得键盘事件处理完成通知 14.5 InputChannel的注销过程 14.5.1 销毁应用程序窗口 14.5.2 注销Client端InputChannel 14.5.3 注销Server端InputChannel 第15章 Android应用程序线程的消息循环模型 15.1 应用程序主线程消息循环模型 15.2 与界面无关的应用程序子线程消息循环模型 15.3 与界面相关的应用程序子线程消息循环模型 第16章 Android应用程序的安装和显示过程 16.1 应用程序的安装过程 16.2 应用程序的显示过程
父
进程
在创建子
进程
之后,哪些东西
共享
,哪些东西不
共享
?
由fork产生的
进程
为子
进程
。fork的一个特性是父
进程
所有的打开文件描述符(file_struct)都被复制到子
进程
中,父子
进程
的每个相同的打开描述符
共享
一个文件表项如图。 在linux系统中的具体实现可用下图表示(说明:
进程
的fs_struct也会被复制,图中没有画出)。 这种
共享
的方式使父、子
进程
对同一个文件使用了同一个文件偏移量。如果父、子
进程
写到同一个文件描述符,但有没有任何形式的同...
linux 文件描述符
引用
计数
(close(fd)只是使fd的
引用
计数
-1)
在unix和linux平台需要考虑多
进程
的情况,fork时,子
进程
继承父
进程
所拥有的文件描述符,需要所有拥有者都close文件描述符才会把资源销毁,所以需要使用
引用
计数
。 参考文章:linux socket close()函数将socket描述字
引用
计数
-1是什么意思? 后更。。。 ...
C++
引用
计数
技术简介(1)
1.
引用
计数
的作用C++
引用
计数
是C++为弥补没有垃圾回收机制而提出的内存管理的一个方法和技巧,它允许多个拥有共同值的对象
共享
同一个对象实体。C++的
引用
计数
作为内存管理的方法和技术手段主要有一下两个作用。 (1)简化了堆对象(heap objects)的管理。 一个对象被从堆中分配出来之后,需要明确知道是谁拥有了这个对象,因为只有拥有这个对象的所有者才能够销毁它。但在实际使用过程中, 这个对象可
c++智能指针与
引用
计数
先在堆上new了两个node,一个node用shared_ptr型指针parent管理,一个node用shared_ptr型指针child管理,通过重载的->可以访问管理空间中的成员,parent指针调用其中的setchild函数成员,该函数可以将node类中的shared_ptr sp_parent去管理参数传进来的指针所管理的空间,即sp_parent去管理第二次new时的空间,child指针调用其中的setparent函数成员也是如此。 代码中各个对象的关系如下图所示,parent和chi......
ATL
3,245
社区成员
48,537
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章