<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > labview深入探索-----內(nèi)存管理和緩存重用

          labview深入探索-----內(nèi)存管理和緩存重用

          作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏



          對于一個不顯示的子VI是不存在操作數(shù)據(jù)的,如果打開了SUBVI的前面板,則包含的控制器和指示器的操作數(shù)據(jù).

          在下面的情況下,將包括操作數(shù)據(jù).

          .前面板打開.

          .框圖程序使用的屬性節(jié)點(diǎn),導(dǎo)致前面板載入內(nèi)存,可能不顯示,但是存在.

          .局部變量讀寫了控制器和指示器.

          .設(shè)置了VI屬性,OPEN WHEN CALLED.

          對于BLOCK的operate數(shù)據(jù)只有在BLOCK顯示的情況下才發(fā)生,編譯成執(zhí)行文件時可以不考慮.

          代碼空間,包括所有子VI的代碼空間在主VI載入內(nèi)存時,一起載入,并長期存在,它包含的是框圖編譯形成的機(jī)器碼.

          子VI的代碼空間一般比較小,但是當(dāng)幾百個以上的SUBVI時,這個內(nèi)存占用就不能不考慮了,當(dāng)你執(zhí)行主VI時候,不管這段代碼是否有用,它都是一直存在的.

          如果是通過VI服務(wù)器動態(tài)調(diào)用的SUBVI,那代碼空間是否載入,何時載入,取決于用戶了.所以使用動態(tài)調(diào)用的方法可以有效地節(jié)約內(nèi)存,但是同時如果經(jīng)常重復(fù)調(diào)用,將影響到運(yùn)行速度,節(jié)約內(nèi)存是以犧牲速度為代價的.

          LV內(nèi)存管理是自動的,但并不是完全不可干預(yù)的,通過研究它的基本運(yùn)行規(guī)則加上我們良好的編程風(fēng)格,就可以提高使用效率.

          看一些實(shí)際的例子.


           

          因?yàn)檠h(huán)計數(shù)端子數(shù)據(jù)類型是I32,占四個字節(jié),所以1000個數(shù)據(jù)占4K字節(jié),從循環(huán)流出的數(shù)據(jù)占數(shù)據(jù)空間4K,

          最上面的圖是數(shù)組索引,是讀的操作,對數(shù)據(jù)流上的數(shù)據(jù)不做任何改變,所以不需要分配新的內(nèi)存,而是重用了內(nèi)存.而下面的圖是替換數(shù)組元素.替換后數(shù)組將發(fā)生變化,因?yàn)椋硞€并行的替換是獨(dú)立的,沒有先后次序,所以LV不得不為2,3處分配額外的4K+4K字節(jié),加上循環(huán)后分配的4K字節(jié),這樣1,2,3處就一共占用了12K.


          這個圖中,替換是要改寫數(shù)據(jù)的,索引是不需要改寫的,如果替換先執(zhí)行,則必須為索引部分重新分配4K內(nèi)存,避免因數(shù)據(jù)改動讀回錯誤的數(shù)據(jù).LV的內(nèi)存管理器是非常智能化的,因此,它會先執(zhí)行索引操作,然后在執(zhí)行替換操作,這樣就重用了4K內(nèi)存,因此占用數(shù)據(jù)空間還是4K.



          這兩個框圖的功能是完全一樣的,但是數(shù)據(jù)空間內(nèi)存占有量是完全不同的.LV內(nèi)存重用它首先選擇從上到下的方式,

          循環(huán)中隨機(jī)數(shù)的數(shù)據(jù)類型是DOUBLE,8個字節(jié),因此數(shù)據(jù)流出8K,1.2加上指示器的操作數(shù)據(jù)共24K,

          下面的圖中,在ADD的過程,它首先試圖選擇1的重用,但是1在乘法的輸入需要,所以無法重用,因此在3處又占用了8K的字節(jié),令人感到疑惑的是它為什么不重用2的內(nèi)存那,因?yàn)樗紫冗x的是上面的1,可見,LV的內(nèi)存管理器也不是萬能的.


          既然LV首先選擇上面的重用,那上圖的字節(jié)應(yīng)該是8K+8K+8K=24K啊,它為什么用的是16K那,這是另外一個原則,因?yàn)樽钌厦娴氖菢?biāo)量,而運(yùn)算結(jié)果是數(shù)組,顯然標(biāo)量是無法重用成數(shù)組的,因此,它選擇了下面的數(shù)組輸出來重用.8K+8K(指示器)=16K


          從上面的圖可以看出,未連接的輸出并不占內(nèi)存空間,因?yàn)槲催B接的輸出沒有后續(xù)的數(shù)據(jù)需要流動,所以LV并不為其分配內(nèi)存.

          SUBVI中的默認(rèn)值也是內(nèi)存空間占用比較大的,尤其是數(shù)組和字符串,它會在VI內(nèi)部保持它的默認(rèn)值,并隨著VI一起保存在磁盤中,當(dāng)然,設(shè)定默認(rèn)值對子VI的調(diào)試非常有好處,如果測試完畢,不需要子VI的默認(rèn)值,記住要清理掉.

          還有一些主要是涉及數(shù)據(jù)類型轉(zhuǎn)換的問題,結(jié)合數(shù)據(jù)類型再分析.



           


          上一頁 1 2 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();