BREW(包括BUIW)引用计数及内存使用规则

卡方检验的隐藏逻辑:为什么正态分布的平方和如此重要? 本文深入探讨了卡方检验的核心逻辑,揭示了正态分布平方和在统计检验中的重要性。通过分析卡方分布与伽马分布的关系,以及实际应用案例,帮助读者理解卡方检验的原理、局限及高级应用场景,为数据分析提供有力工具。 阅读详情

BREW(包括BUIW)引用计数及内存使用规则

毛晓冬 2007-1-26

 

一、概述:

BREW使用COM的引用计数机制在多个客户间同时共享一个接口的实例,保证各个客户在使用期间,该接口实例始终有效,而不管其他客户是否已经使用完该接口实例。只有当所有客户都结束使用时,该接口的实例才会被释放。

该机制使得我们必须正确操作接口的引用计数,否则会造成内存泄漏,或者重复释放等严重问题。

所以,我们需要掌握引用计数的使用规则和注意点。依据相关文档和SDK实例,总结本文档。

 

二、BREW标准接口的引用计数规则:

1.  规则1:当接口实例以函数的出口参数请求得到时,该接口实例已经在函数内部被引用计数加1。

例子:Ishell_CreateInstance(pIShell,Clsid,(void**)&pInterface)创建接口,接口实例获得时,已经引用计数被加1。

IXXX_QueryInterface(pIXXX,AEEXXID,(void**)&pInterface)查询接口,接口实例获得时,已经引用计数加1。

IFORM_GetBGImage(IForm *po, IImage **ppi)获得Image接口实例时,Image接口实例引用计数已经被加1

2.  规则2:当接口实例以函数的返回值被请求得到时,该接口实例引用计数没有被加1。

       例子:IWidget *ICONTAINER_GetWidget(IContainer *p, IWidget *pw, boolean d, boolean w)得到的Iwidget实例引用计数没有被加1。 

3.  规则3:当接口实例以函数的输入参数输入时,该接口实例会被函数内部引用计数加1。

例子:void IDECORATOR_SetWidget(IDecorator *p, IWidget *pw)的内部会将pw实例的引用计数加1。

 

三、一些例外:

1.  Ibitmap* Idisplay_GetDestination(Idisplay *po),Ibitmap* Ishell_LoadImage()会将返回的Ibitmap接口实例引用计数加1。

2.  Ifont* Idisplay_SetFont(Idisplay* po,AEEFont nFont,Ifont* piNewFont),即不会将返回的Old Font接口实例引用计数加1,也不会将输入的NewFont接口实例引用计数加1。

 

四、如何确切知道引用计数行为:

SDK中90%以上的接口函数,都遵循标准引用计数规则,只有极少数的接口函数属于例外。但都在SDK的接口函数说明中详细进行了说明。所以,调用一个接口函数时,确切的了解对接口实例是否进行了引用计数加1的最好方法,是阅读相关的SDK说明。

 

五、使用接口时,我们该怎么做:

基于以上的引用计数规则,我们在使用接口时,应该注意:

1.  当调用某些接口函数请求接口时,如果接口实例被引用计数加1了,那么请求者有责任当使用完毕后,调用接口的Release进行释放。

否则,请求者只需要使用,无需负责释放(这会造成接口的两次释放)。如果此时,请求者想异步的长时间使用该接口,为了避免其他地方的释放对己造成的影响,请求者可以在请求得到该接口实例后,先调用AddRef,然后再使用,使用结束后,调用Release

2.  当调用某些接口函数输入接口时,如果接收接口的函数内部做了引用计数加1,那么输入者输入完接口后,可以在任何想释放的时候释放该接口实例,因为接收组件内部会管理该实例。

否则,输入者输入完接口后,仍然必须一直保证该接口的实例有效,不能过早的释放。

例子:App使用Idisplay_SetFont时,输入pNewFont的实例后,必须一直保证该实例的有效性,不能将其释放,因为Idisplay_SetFont内部并没有对pNewFont的引用计数加1。

 

六、一些延伸:

基于上面的引用计数使用规则和注意点。我们可以延伸到其他的使用注意点:

1.  当App间以参数的形式进行接口实例的传递时,接收方必须将其引用计数加1后,再使用,使用完后,再Release,发送方将不再对传出的接口实例负责。

2.  自己实现扩展接口时,也必须遵循相关的规则,比如当接收接口实例时,需要进行引用计数加1后再使用,使用完后进行释放。以出口参数带出接口实例时,必须先引用计数加1,再带出。

 

七、最后一个注意点:

由于引用计数的存在,接口被Release时可能仅仅是引用计数减1,而非真正的被释放。所以,不能轻易的在释放接口后,将接口实例指针置为NULL,这是和一般的内存操作不一样的。错误的将接口实例指针置为NULL,可能会导致内存泄漏或者非法指针操作等潜在的问题。

一般的准则是,只有当确保该接口实例不会再有任何组件使用时,才将其置为NULL。比如,对于App Struct中的接口成员,应该只在Free Data中使用RELEASEIF释放并置为NULL,其他处,应该只进行释放,而不置为NULL。对于Form的成员,则可以在Form的Delete Data回调中,使用RELEASEIF释放并置为NULL,其他处,应该只进行释放,而不置为NULL。

注意:RELEASEIF是宏,释放接口后,会将其置为NULL。

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解 Qoder AI 编程工具从部署到深度使用实战详解 阅读详情

相关推荐

激光条纹中心提取——Steger

激光条纹中心提取-Steger 好久没有记录了,记录一下今天学习的内容,据说Steger在激光条纹中心提取上神一般的存在。文章和代码都分享给大家了哈,其中有四个文件,3个C++,一个python,python一个抠图文件,3个c++包含背景图+原图, 单张图提取, 多张图提取。 分享代码 #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc.hpp> #i

CharmsLUO的博客 5380

HRBUST 1314 火影忍者之~纲手【MAP】

火影忍者之~纲手 Time Limit: 3000 MSMemory Limit: 65536 KTotal Submit: 246(78 users)Total Accepted: 101(69 users)Rating:Special Judge: NoDescription因为大蛇丸的捣乱,木叶忍者村痛失了和蔼的三代火影,所以身为三代火影徒弟之一的纲手不得不接受木叶村火影的职务~,因为刚刚上...

Emiya丶的博客 35万+

华大 HC32F460 DMA数据传输实战:从配置到中断处理的完整指南

本文提供了华大半导体HC32F460微控制器DMA(直接内存访问)功能的完整实战指南。详细解析了DMA的配置流程、中断处理机制以及软件与硬件触发方式,并附有实验代码示例。通过合理使用DMA进行数据传输,可以显著解放CPU资源,提升嵌入式系统的实时性与运行效率。

weixin_29194255的博客 255

oracle中turunc,Domains Expired list 2008-12-15_11

onlysigned.netonlystiparts.netonmass.netonoff-communication.comonogolf.netononatlanta.comonovci.comonp2p.comonpargolf.netonport80.comonrepwe.comonroerendgoedcostablanca.comonroerendgoedcostabra.comons...

weixin_39618597的博客 1万+

ROS四旋翼无人机快速上手指南(4):阿木实验室PX4功能包飞行控制分析与讲解(重点章节)

成就更好的自己 这一章详细讲解一下阿木实验室(AMOV)的开源项目px4_command功能包,此功能包通过mavlink协议直接控制烧录px4固件的自驾仪,还融合了来自各个传感器的位姿,距离等信息,此外,功能包提供的接口向上对接应用层算法级的程序例如SLAM,kfc目标检测引导,路径规划等算法,因此,在整个无人机控制中起到了承上启下至关重要的作用。 用到的文件及工具包链接如下: AMOV实验室源码如下: https://gitee.com/theroadofengineers/px4_comman

The Road of Engineer 6170

transformer优化(一)-UNeXt 学习笔记

​它在早期阶段使用卷积,在潜在空间阶段使用 MLP。通过一个标记化的 MLP 块来标记和投影卷积特征,并使用 MLP 对表示进行建模。 ​

PLANTTHESON的博客 2033

Feistel

Feistel 结构算法解密 题目重述 拿到题目,题目先是给了一点密文,打开之后,发现是一段乱码: Ltf/hop5'ckv`o{yjja}' vaj/|}ai`mbc|a3`trj#{)tyu{iaan.odtrfeejgfninfndfss{nxpoa`oug!n3rCv`n)hgaqumg;;e}pynec'1rra.k`gffyettt|fnge&ue/}vlk,s&cyr...

weixin_44118068的博客 1万+

MTK平台LCD驱动开发实战:从零开始点亮你的Android屏幕

本文详细介绍了在MTK平台进行Android LCD驱动开发的完整流程。从理解LK与Kernel双核驱动框架入手,手把手讲解驱动结构体、屏幕参数配置、初始化序列编写以及PLL_CLOCK计算等核心步骤,并提供了系统集成配置与实用的调试避坑指南,帮助开发者高效点亮新屏幕。

terraform7cloud的博客 292

Naruto图片下载

很傻,很笨,但很有效的方法。 王之 function downPic() % 火影忍者图片下载 ul1='******'; for i=1:30 ul = [ul1,num2str(i)]; html=webread(ul); p1=strfind(html,'<picture>'); p2=strfind(html,'</picture>'); for j =1:length(p1) p=html(p1(j):p2(j

Kwzc4的博客 5万+

Knewton自适应学习平台实战:如何用大数据打造个性化教育体验

本文深入解析Knewton自适应学习平台如何利用大数据技术构建个性化教育体验。通过多维度数据采集、动态认知诊断模型和智能推荐系统,平台能精准识别学生知识盲区,提供定制化学习路径。实战案例显示,该方案显著提升完课率并优化学习效率,展现了自适应学习技术的教育变革潜力。

info6的博客 504

ADRC自抗扰控制:工程抗扰“黑科技”,附C代码实战!

自抗扰控制(ADRC)是一种革新性的强鲁棒控制策略,通过主动估计和补偿系统扰动,无需精确数学模型即可实现优异控制性能。本文详细解析ADRC三大核心组件:跟踪微分器(TD)实现指令柔化,扩张状态观测器(ESO)实时估计总扰动,非线性状态反馈(NLSEF)完成动态补偿。针对二阶系统,文章提供完整的参数设计方法和C语言实现框架,包括关键函数fhan和fal的代码实现。ADRC将复杂对象"线性化"为积分器串联系统,显著提升抗扰能力,特别适用于电机控制、飞行器姿态等存在模型不确定性和强干扰的场景。

技术工作者 1733

one piece_娜美_01

LCA 模板 + poj 1330 #include #include using namespace std; const int MAX=10001; int f[MAX]; //每个节点所属的集合 int r[MAX]; //r是rank(秩) 合并 int indegree[MAX];//保存每个节点的入度 int visit[MAX];//只有1和0,表示某节点的Id是

我心中有猛虎 细嗅蔷薇 2万+

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2391

browse.php?u,xeHentai: 绅士站爬虫 镜像自 https://github.com/fffonion/xeHentai

E-Hentai Dōjinshi DownloaderTL;DRWindows users can download packed binaries from here or here. The package is built using PyInstaller.Or run directly from source code:pip install -U requests[socks]git...

weixin_39825854的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Unite Tokyo 2018】虚拟YouTuber电脑少女Siro「2018年资源推荐

视频地址https://www.bilibili.com/video/av24209824 1.Dynamic Bone(动力学骨骼插件) 2.Arbor 3(行为树插件) 3. Very Animation动画编辑插件4. Post Processing Stack(全屏幕镜头效果)5.Post Processing Profiles(全屏幕镜头效果)6. Hierarchy Pro Pl...

Naruto_Hinata_的博客 5534

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

One Piece1-541(ed2k)

1-143 http://www.VeryCD.com/topics/143292/ 144-228 http://www.VeryCD.com/topics/17082/ 229-325 http://www.VeryCD.com/topics/39594/ 326-384 http://www.VeryCD.com/topics/198051/ 385-458 ht

贾亮的专栏 18万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mybatis:CRUD操作

select:操作 1.在rMapper接口中添加对应方法 public interface UserMapper { //查询全部用户 //使用注解 @select("select * from user") List<User> selectUser(); //根据id查询用户 //使用注解 @select("select * from user where id = #{id}") User selectUserById(@Param("id") int

onepiece154的博客 314

【热门主题:动漫进击巨人xp主题】

简要描述: 动漫进击巨人电脑桌面主题:由热门主题xp主题下载独家原创制作而成     动漫进击巨人电脑桌面壁纸下载《鼠标右键另存为本地》 动漫进击巨人电脑桌面主界面效果图2012热门主题 动漫进击巨人电脑桌面开始菜单效果图2013热门主题 动漫进击巨人电脑桌面图标效果图   动漫进击巨人电脑鼠标效果图 动漫进击巨人主题内容:动漫

瞳孔裏旳阳光的专栏 1455

【水汐のpython】 用python抓取外网的本子站并获取本子封面和信息

放假了正事不干,天天闲着ghs,顺便记录下吧 头文件祖传的实际上没用到那么多,看着加吧 import datetime import socketserver import time from json import loads from xml import etree import requests #禁用安全请求警告pip install requests import re import base64 from PIL import Image from io import BytesIO impo

水汐天下第一的博客 3万+

探索 Pixiv-Shaft:一个强大的Pixiv客户端工具

探索 Pixiv-Shaft:一个强大的Pixiv客户端工具 Pixiv-ShaftPixiv第三方Android客户端项目地址:https://gitcode.com/gh_mirrors/pi/Pixiv-Shaft 项目简介 是一个由 CeuiLiSA 开发的开源项目,它提供了一个优雅、高效且自定义程度高的 Pixiv(日本知名插画社交网站)客户端应用。通过使用这个项目,用户可以更便捷地浏...

gitblog_00039的博客 2552

**Shaft —— 重塑你的Pixiv体验**

Shaft —— 重塑你的Pixiv体验 Pixiv-ShaftPixiv第三方Android客户端项目地址:https://gitcode.com/gh_mirrors/pi/Pixiv-Shaft ????项目介绍 你是否曾梦想过拥有一个更流畅、更美观的Pixiv体验?渴望能随心所欲地欣赏心仪的作品,而不受地域限制的困扰?如果是这样,那么Shaft正是为你量身打造的艺术天堂。作为一款专注于优化用户...

gitblog_00254的博客 3910

生成模型——Pix2Pix

Pix2Pix 是一种基于条件生成对抗网络(cGANs)的模型,它通过一个生成器和一个判别器来学习图像转换任务。通常,Pix2Pix 用于图像到图像的转换,如将草图转换为真实图片,或者将黑白图像转换为彩色图像。生成器学习如何根据输入图像生成输出图像,判别器则帮助生成器改进生成效果,判断输出图像是否真实。

大摆王的博客 4421

android binder IPC 通信中 asInterface 与 asBinder

Binder 用于通信,Interface用于功能调用。 其实asInterface 完成的是Binder到Interface的转换,具体就是: BBinder->BnInterface BpBinder->BpInterface 而asBinder功能则相反,具体是: BnInterface->BBinder BpInterface->BpBind...

weixin_30345577的博客 2120

Apapche 获取真实IP地址方法

测试环境 IP相关信息 VPC环境ECS内网IP:10.0.xx.177ECS公网IP:121.196.xx.22SLB的IP:118.178.xx.145 http监听 80端口 WAF测试域名:test.pierxx.cnWAF测试域名对应Cname:rxqetx2tcwmn7oqjmykc0xxxx.aliyunwaf.com (101.37.x...

weixin_34019144的博客 515

chunxunnet

## 船讯网数据抓取 import json import execjs import requests import time from pymongo import MongoClient # from Gangkou_net import tools ''' 船讯网只能通过mmsi获取其对应的轨迹信息 ''' class Tools(): @staticmethod def calculate_track(lon, lat): ''' 经纬

m0_45605831的博客 1万+

ZYNQ 或ZYNQ Ultrascale PS/PL交互

1、在PYNQ框架下,PS/PL 交互可以用MMIO这个PYNQ类。如该处的例子https://blog.youkuaiyun.com/qq_35290955/article/details/107671930 2、在SDK中,可以用xil_io.h这个头文件的IO读写函数。如该处的例子https://blog.youkuaiyun.com/narutoinspire/article/details/79401559?utm_medium=distribute.pc_relevant.none-task-blog-title-2&

weixin_45704530的博客 7633
上一篇: BREW App State Transition based BREW3.1.x
下一篇: Post/Send Event传递指针的危险性分析
nicefuture
博客等级 码龄23年 75粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值