為什么要選擇為每一個(gè)接口單獨(dú)維護(hù)一個(gè)引用計(jì)數(shù)而不是針對(duì)整個(gè)組件維護(hù)引用計(jì)數(shù)呢?
主要有兩個(gè)原因:一是使程序調(diào)試更為方便;另外一個(gè)原因是支持資源的按需獲取。
1程序調(diào)試:
假設(shè)在程序中忘記對(duì)某個(gè)接口調(diào)用Release(其實(shí)很多人會(huì)犯這個(gè)錯(cuò))。這樣組件將永遠(yuǎn)不會(huì)被刪除掉,因?yàn)橹皇窃谝糜?jì)數(shù)值0時(shí)delete才會(huì)被調(diào)用 。這時(shí)就需要找出接口在何時(shí)何處應(yīng)該被釋放掉。當(dāng)然找起來(lái)是相當(dāng)困難的。在只對(duì)整個(gè)組件維護(hù)一個(gè)接口的情況下,進(jìn)行這種 查找更為因難了。此時(shí)必須檢查使用了此組件所提供的所有接口的代碼。但若組件支持對(duì)每個(gè)接口分別維護(hù)一個(gè)引用計(jì)數(shù)那么可以把查找的范圍限制在某個(gè)特定的接口上。在某些情況下這可以節(jié)省大量時(shí)間。
2.資源的按需獲取
在實(shí)現(xiàn)某個(gè)接口時(shí)可能需要大量的內(nèi)存或其他資源。對(duì)于此種情況,可以在QueryInterface的實(shí)現(xiàn)中,在客戶請(qǐng)求此接口時(shí)完成資源的分配。但若只對(duì)整個(gè)組件維護(hù)一個(gè)引用計(jì)數(shù),組件將無(wú)法決定何時(shí)可以安全地將此些接口相關(guān)聯(lián)的內(nèi)存釋放。但基對(duì)每個(gè)接口分別維護(hù)一個(gè)引用計(jì)數(shù),那么決定何時(shí)可以將此內(nèi)存釋放將會(huì)容易得多。
正確使用引用計(jì)數(shù)三條簡(jiǎn)單的規(guī)則
1. 在返回之前調(diào)用AddRef。對(duì)于那些建好些返回接口指針的函數(shù),在返回之前應(yīng)該相應(yīng)的指針調(diào)用AddRef。這些函數(shù)包括QueryInterface 及CreateInstance。這樣當(dāng)客戶從這種 函數(shù)得到一個(gè)接口后。它將無(wú)需調(diào)用AddRef.
2.使用完接口之后調(diào)用Release。在使用某個(gè)接口之后應(yīng)該調(diào)用些接口的Release函數(shù)。
3.在賦值之后調(diào)用AddRef. 在將一個(gè)接口指針賦給另一個(gè)接口指針時(shí),應(yīng)調(diào)用AddRef。換句話說(shuō),在建立接口的別外一個(gè)引用之后應(yīng)增加相應(yīng)組件的引用計(jì)數(shù)。
在客戶看來(lái),引用計(jì)數(shù)是處于接口級(jí)的而不是組件級(jí)的。但從實(shí)現(xiàn)的角度來(lái)看,誰(shuí)的引用計(jì)數(shù)被記錄下來(lái)實(shí)際上沒(méi)有關(guān)系。客戶可以一直接相信組件將記錄每個(gè)接口本身維護(hù)引用計(jì)數(shù)值。但客戶不能假設(shè)整個(gè)組件維護(hù)單個(gè)的引用計(jì)數(shù)。
對(duì)于客戶而言,每一個(gè)接口被分別維護(hù)一個(gè)引用計(jì)數(shù)意味著客戶應(yīng)該對(duì)它將要使用的指針調(diào)用AddRef,而不是其他的什么指針。對(duì)于使用完了指針客戶應(yīng)該調(diào)用其Release。
選擇為每一個(gè)接口單獨(dú)維護(hù)一個(gè)引用計(jì)數(shù)而不是針對(duì)整個(gè)組件維護(hù)引用計(jì)數(shù)的原因:
使程序調(diào)試更為方便;支持資源的按需獲取;
可以通過(guò)增大和減少某個(gè)數(shù)的值而實(shí)現(xiàn)之。
另外要注意的是AddRef和Release的返回值沒(méi)有什么意義,只是在程序調(diào)試中才可能會(huì)用得上.客戶不應(yīng)將此從此值當(dāng)成是組件或其接口的精確引用數(shù)。
客戶必須對(duì)每一個(gè)接口具有一個(gè)單獨(dú)的引用計(jì)數(shù)值那樣來(lái)處理各接口。因此,客戶必須對(duì)不同的接口分別進(jìn)行引用計(jì)數(shù),即使它們的生命期是嵌套的。
一、輸出參數(shù)規(guī)則
輸出參數(shù)指的是給函數(shù)的調(diào)用者傳回一個(gè)值的函數(shù)參數(shù)。從這一點(diǎn)上講,輸出參數(shù)的作用同函數(shù)的返回值是類似的。任何在輸出參數(shù)中或作為返回值返回一個(gè)新的接口指針的函數(shù)必須對(duì)些接口指針調(diào)用AddRer。
二、輸入?yún)?shù)規(guī)則
對(duì)傳入函數(shù)的接口指針,無(wú)需調(diào)用AddRef和Release,這是因?yàn)楹瘮?shù)的生命期嵌套在調(diào)用者的生命期內(nèi)。
三、輸入-輸出參數(shù)規(guī)則
輸入-輸出參數(shù)同時(shí)具有輸入?yún)?shù)及輸出參數(shù)的功能。在函數(shù)休中可以使用輸入-輸出參數(shù)的值,然后可以對(duì)這些值進(jìn)行修改并將其返回給調(diào)用者。
在函數(shù)中,對(duì)于用輸入-輸出參數(shù)傳遞進(jìn)來(lái)的接口指針,必須在給它賦另外一個(gè)接口指針值之前調(diào)用其Release。在函數(shù)返回之前,還必須對(duì)輸出參數(shù)中所保存的接口指針調(diào)用AddRef。
四、局部變量規(guī)則
對(duì)于局部自制的接口指針,由于它們只是在函數(shù)的生命其內(nèi)才存在,因此無(wú)需調(diào)用AddRef和Release。這條規(guī)則實(shí)際是輸入?yún)?shù)規(guī)則的直接結(jié)果。在下面的例子中,pIX2只是在函數(shù)foo的生命期內(nèi)都在,因此可以保證其生命期將嵌套在所傳入的pIX指針的生命期,因此無(wú)需對(duì)pIX2調(diào)用AddRef和Release。
五、全局變量規(guī)則
對(duì)于保存在全局變量中的接口指針,在將其傳遞給另外一個(gè)函數(shù)之前,必須調(diào)用其AddRef。由于此變量是全局性的,因此任何函數(shù)都可以通過(guò)調(diào)用其Release來(lái)終止其生命期。對(duì)于保存在成員變量中的接口指針,也應(yīng)按此種方式進(jìn)行處理。因?yàn)轭愔械娜魏纬蓡T函數(shù)都可以改變此種接口指針的狀態(tài)。
六、不能確定時(shí)的規(guī)則
對(duì)于任何不定的情形,都應(yīng)調(diào)用AddRef和Release對(duì)。
另外,在決定要進(jìn)行優(yōu)化時(shí),應(yīng)給那些沒(méi)有進(jìn)行引用計(jì)數(shù)的指針加上相應(yīng)的注釋,否則其它程序員在修改代碼時(shí),將可能會(huì)增大接口指針的生命期,從而合引用計(jì)數(shù)的優(yōu)化遭到破壞。
忘記調(diào)用Release造成的錯(cuò)誤可能比不調(diào)用AddRef造成的錯(cuò)誤更難檢測(cè)。
最直觀的垃圾收集策略是引用計(jì)數(shù)。引用計(jì)數(shù)很簡(jiǎn)單,但是需要編譯器的重要配合,并且增加了賦值函數(shù) (mutator) 的開(kāi)銷(這個(gè)術(shù)語(yǔ)是針對(duì)用戶程序的,是從垃圾收集器的角度來(lái)看的)。每一個(gè)對(duì)象都有一個(gè)關(guān)聯(lián)的引用計(jì)數(shù) —— 對(duì)該對(duì)象的活躍引用的數(shù)量。如果對(duì)象的引用計(jì)數(shù)是零,那么它就是垃圾(用戶程序不可到達(dá)它),并可以回收。每次修改指針引用時(shí)(比如通過(guò)賦值語(yǔ)句),或者當(dāng)引用超出范圍時(shí),編譯器必須生成代碼以更新引用的對(duì)象的引用計(jì)數(shù)。如果對(duì)象的引用計(jì)數(shù)變?yōu)榱悖敲催\(yùn)行時(shí)就可以立即收回這個(gè)塊(并且減少被回收的塊所引用的所有塊的引用計(jì)數(shù)),或者將它放到遲延收集隊(duì)列中。
com組件將維護(hù)一個(gè)稱作是引用計(jì)數(shù)的數(shù)值。當(dāng)客戶從組件取得一個(gè)接口時(shí),此引用計(jì)數(shù)值將增1。當(dāng)客戶使用完某個(gè)接口后,組件的引用計(jì)數(shù)值將減1.當(dāng)引用計(jì)數(shù)值為0時(shí),組件即可將自己從內(nèi)存中刪除。
與跟蹤式垃圾回收相比,引用計(jì)數(shù)的主要優(yōu)點(diǎn)是可以盡快地回收不再被使用的對(duì)象,同時(shí)在回收過(guò)程中不會(huì)導(dǎo)致長(zhǎng)時(shí)間的停頓,還可以清晰地標(biāo)明每一個(gè)對(duì)象的生存周期。
在實(shí)時(shí)應(yīng)用或內(nèi)存受限的系統(tǒng)中,實(shí)時(shí)響應(yīng)能力是一項(xiàng)重要指標(biāo),而引用計(jì)數(shù)作為最容易實(shí)現(xiàn)的垃圾回收技術(shù)之一,很適合于這種情況。引用計(jì)數(shù)還可以用于管理其他非內(nèi)存資源,如操作系統(tǒng)對(duì)象(經(jīng)常比內(nèi)存資源更稀缺)。跟蹤式垃圾回收技術(shù)用終結(jié)器處理此類目標(biāo),但延遲回收可能引發(fā)其他問(wèn)題。加權(quán)引用計(jì)數(shù)是適用于分布式系統(tǒng)的派生技術(shù)。
在可用內(nèi)存被活躍對(duì)象填滿的平臺(tái)上,跟蹤式垃圾回收會(huì)被頻繁觸發(fā),從而降低性能。而引用計(jì)數(shù)即便在內(nèi)存瀕臨耗盡的情況下性能依然有所保障。引用計(jì)數(shù)還能為其他運(yùn)行時(shí)優(yōu)化技術(shù)提供參考信息,例如對(duì)于許多使用不可變對(duì)象的系統(tǒng)來(lái)說(shuō)(如函數(shù)式編程語(yǔ)言),大量復(fù)制對(duì)象導(dǎo)致的性能懲罰有時(shí)十分嚴(yán)重;在此類系統(tǒng)上一個(gè)典型的優(yōu)化措施是:假如一個(gè)對(duì)象被創(chuàng)建以后僅使用了一次,且在其不再被引用的同時(shí)另一個(gè)類似的對(duì)象被創(chuàng)建出來(lái)(如Javascript中的字符串拼接賦值操作),可以將刪除原對(duì)象創(chuàng)建新對(duì)象的行為變?yōu)樾薷脑瓕?duì)象,從而提高效率。引用計(jì)數(shù)可以為這類優(yōu)化提供充分的參考信息。
未經(jīng)優(yōu)化的引用計(jì)數(shù)相比跟蹤式垃圾回收有兩個(gè)主要缺點(diǎn),都需要引入附加機(jī)制予以修復(fù):
頻繁更新引用計(jì)數(shù)會(huì)降低運(yùn)行效率。
原始的引用計(jì)數(shù)無(wú)法解決循環(huán)引用問(wèn)題。
另外,如果使用空閑列表分配內(nèi)存,那么引用計(jì)數(shù)的空間局域性非常差。僅使用引用計(jì)數(shù)無(wú)法通過(guò)移動(dòng)對(duì)象來(lái)提高CPU緩存的性能,所以高性能的內(nèi)存分配器都會(huì)同時(shí)實(shí)現(xiàn)一個(gè)跟蹤式垃圾回收器以提高性能。許多引用計(jì)數(shù)實(shí)現(xiàn)(比如PHP和Objective-C)的性能不佳都是因?yàn)闆](méi)有實(shí)現(xiàn)內(nèi)存拷貝。
現(xiàn)在的電子秤怎么用計(jì)數(shù)那個(gè)功能
先稱一個(gè)產(chǎn)品的個(gè)數(shù)重量,然后再輸入取樣產(chǎn)品的重量,再放上其他的產(chǎn)品,再按點(diǎn)數(shù)功能鍵。就可稱出其他產(chǎn)品的個(gè)數(shù)
計(jì)數(shù)秤使用步驟:開(kāi)機(jī)回零,按設(shè)定或計(jì)數(shù)鍵進(jìn)入計(jì)數(shù)程序,(數(shù)一定數(shù)量產(chǎn)品,如五或十)放在秤上再按設(shè)定或計(jì)數(shù)鍵進(jìn)入計(jì)數(shù)…(計(jì)數(shù)顯示最大量因秤而定)再按設(shè)定或計(jì)數(shù)鍵退出計(jì)數(shù)系統(tǒng)。
水泥計(jì)數(shù)器就是:水泥廠裝車機(jī)上用的,專門用于水泥袋出庫(kù)裝車時(shí),自動(dòng)計(jì)數(shù)和點(diǎn)包的自動(dòng)控制微機(jī)。 HQ-210水泥計(jì)數(shù)器(又名:HQ-210水泥點(diǎn)包機(jī)) 應(yīng)用領(lǐng)域: 水泥廠、化肥廠、面粉廠、飼料廠、化...
格式:pdf
大小:274KB
頁(yè)數(shù): 未知
評(píng)分: 4.8
針對(duì)注塑模中需要對(duì)可自動(dòng)脫螺紋的螺紋型芯起始角度作出規(guī)定的情況,采用計(jì)數(shù)器作為主要的機(jī)電部件,光電傳感器和光電反射板作為輔助部件,通過(guò)計(jì)數(shù)器的計(jì)數(shù)電路接入注塑機(jī)的液壓馬達(dá)控制電路,以有外形角度對(duì)應(yīng)特征的瓶和瓶蓋注塑零件為例,在注塑模上使用計(jì)數(shù)器完成了可轉(zhuǎn)動(dòng)螺紋型芯的角度定位。這種方法穩(wěn)定可靠,在螺紋型芯起始角度定位有一定公差的情況下,可以使用該套模具。
格式:pdf
大小:274KB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.5
介紹玻璃纖維濾紙的發(fā)展情況和歐洲標(biāo)準(zhǔn)EN1822所推薦的高效濾紙過(guò)濾性能測(cè)試系統(tǒng),通過(guò)理論推導(dǎo)與實(shí)驗(yàn)對(duì)比,分析此測(cè)試系統(tǒng)中光學(xué)粒子計(jì)數(shù)器的重疊損失和系統(tǒng)中測(cè)試氣溶膠濃度波動(dòng)引起的測(cè)量誤差。結(jié)果表明,當(dāng)高效濾紙效率測(cè)試系統(tǒng)選用2臺(tái)計(jì)數(shù)器時(shí),測(cè)試結(jié)果受氣溶膠濃度波動(dòng)影響很小,僅取決于計(jì)數(shù)器自身的重疊誤差;當(dāng)選用1臺(tái)計(jì)數(shù)器分別上、下游采樣時(shí),存在著由于氣溶膠粒子濃度波動(dòng)所造成的測(cè)試誤差,可通過(guò)減少氣溶膠發(fā)塵器發(fā)塵濃度的波動(dòng)來(lái)有效地減小這種誤差。
μC/TCP-IP在運(yùn)行過(guò)程中維護(hù)著一組計(jì)數(shù)器,用于追蹤網(wǎng)絡(luò)協(xié)議棧的各種錯(cuò)誤態(tài)。如果需要的話,應(yīng)用程序可以通過(guò)檢查錯(cuò)誤計(jì)數(shù)器來(lái)調(diào)試運(yùn)行當(dāng)中的問(wèn)題,包括內(nèi)存剩余空間較低、性能差或數(shù)據(jù)包丟失等等。
網(wǎng)絡(luò)協(xié)議的錯(cuò)誤計(jì)數(shù)器被放在一個(gè)命名為Net_ ErrCtrs的結(jié)構(gòu)體變量中,可以利用調(diào)試器或應(yīng)用程序(以外部變量的形式引用)在運(yùn)行時(shí)檢測(cè)該變量。
要使能這些錯(cuò)誤統(tǒng)計(jì),必須將net_cfg.h中的 NET_CTR_CFG_ERR_EN配置為DEF_ENABLED。
具有記憶輸入脈沖個(gè)數(shù)作用的邏輯部件,稱之為計(jì)數(shù)器。計(jì)數(shù)器的種類很多,按進(jìn)位制可分為二進(jìn)制、十進(jìn)制、五進(jìn)制、七進(jìn)制等計(jì)數(shù)器;按計(jì)數(shù)器中觸發(fā)器翻轉(zhuǎn)的次序可分為異步式和同步式兩種;按計(jì)數(shù)過(guò)程中數(shù)字的增、減可分為加法、減法、加減可逆計(jì)數(shù)器等。
在數(shù)字系統(tǒng)中,對(duì)脈沖的個(gè)數(shù)進(jìn)行計(jì)數(shù)、以實(shí)現(xiàn)數(shù)字測(cè)量、運(yùn)算和控制的數(shù)字部件,稱為計(jì)數(shù)器。
計(jì)數(shù)器主要由觸發(fā)器構(gòu)成。若按觸發(fā)器的翻轉(zhuǎn)的次序來(lái)分類,可以把計(jì)數(shù)器分為同步式和異步式。在同步計(jì)數(shù)器中,當(dāng)計(jì)數(shù)脈沖輸入時(shí)所有觸發(fā)器是同時(shí)翻轉(zhuǎn)的;而在異步計(jì)數(shù)器中,各級(jí)觸發(fā)器則不是同時(shí)翻轉(zhuǎn)的。若按計(jì)數(shù)過(guò)程中計(jì)數(shù)器中數(shù)字的增減來(lái)分類,可以分為加法計(jì)數(shù)器,減法計(jì)數(shù)器和可逆計(jì)數(shù)器(亦稱加減計(jì)數(shù)器)。加法計(jì)數(shù)器是隨著計(jì)數(shù)脈沖的不斷輸入而遞增計(jì)數(shù)的;減法計(jì)數(shù)器是隨著計(jì)數(shù)脈沖的不斷輸入而遞減計(jì)數(shù)的;可增可減的稱可逆計(jì)數(shù)器 。
計(jì)數(shù)器是一種邏輯元件,在一事件發(fā)出時(shí),可使所存儲(chǔ)數(shù)據(jù)增加“1”或一個(gè)常數(shù)。從某種意義上說(shuō),計(jì)數(shù)器也是一個(gè)寄存器,它能“記住”送到其輸入端的脈沖數(shù)目。計(jì)數(shù)器對(duì)計(jì)算機(jī)來(lái)說(shuō)是很重要的,例如在控制器中要對(duì)程序中的指令地址進(jìn)行計(jì)數(shù),以便在執(zhí)行完一條指令后,按新的地址轉(zhuǎn)入下一條指令。計(jì)數(shù)器由一定數(shù)量的觸發(fā)器和門電路組成,現(xiàn)在一般都采用集成電路 。
1、如果按照計(jì)數(shù)器中的觸發(fā)器是否同時(shí)翻轉(zhuǎn)分類,可將計(jì)數(shù)器分為同步計(jì)數(shù)器和異步計(jì)數(shù)器兩種。
2、如果按照計(jì)數(shù)過(guò)程中數(shù)字增減分類,又可將計(jì)數(shù)器分為加法計(jì)數(shù)器、減法計(jì)數(shù)器和可逆計(jì)數(shù)器,隨時(shí)鐘信號(hào)不斷增加的為加法計(jì)數(shù)器,不斷減少的為減法計(jì)數(shù)器,可增可減的叫做可逆計(jì)數(shù)器。