labview深入探索------類型轉(zhuǎn)換、數(shù)組字符串與內(nèi)存管理
很多時(shí)候,我們無法預(yù)先知道我們需要的數(shù)組大小,比如我們需要一個(gè)字符串?dāng)?shù)組,來記錄報(bào)警信息,無法知道會(huì)有多少報(bào)警發(fā)生,這樣就需要根據(jù)實(shí)際情況,來不斷地改變數(shù)組的大小,一個(gè)比較好的方法是每次申請一定數(shù)量的內(nèi)存,而不是一個(gè)元素的大小,這樣,當(dāng)內(nèi)存再次需要的時(shí)候,我們可以再次申請,當(dāng)整個(gè)循環(huán)結(jié)束的時(shí)候,我們可以去掉多余的空間,得到結(jié)果。

內(nèi)存碎片的問題,對于任何編程語言都是存在的,當(dāng)內(nèi)存碎片越來越多的情況下,程序運(yùn)行會(huì)越來越慢,內(nèi)存管理器要進(jìn)行大量的搜索試圖找到可用的空間,碎片是如何產(chǎn)生的那,比如我們有三個(gè)操作ABC,A、B、C分別申請了三塊內(nèi)存,他們是連續(xù)的,當(dāng)B的內(nèi)存釋放的時(shí)候,在A、C中間的內(nèi)存區(qū)域就成了碎片,當(dāng)我們在一個(gè)子VI中不斷地用BUILD ARRAY或者conctenate string 時(shí),不斷引起內(nèi)存的申請和釋放,這樣,內(nèi)存空間碎片會(huì)越來越多。也就是內(nèi)存的間隙越來越多,作為LV的用戶,我們沒有辦法控制內(nèi)存碎片,只能盡量地使用固定長度的數(shù)組或者字符串,我們可以做一個(gè)標(biāo)志,用不太可能的數(shù)據(jù)來填充這個(gè)數(shù)組,這樣通過這個(gè)特殊的數(shù)或者特殊字符,就可以得到實(shí)際數(shù)據(jù)。本文引用地址:http://www.104case.com/article/201701/337267.htm
labview內(nèi)部是如何存儲(chǔ)數(shù)組和字符串的
了解數(shù)組在內(nèi)存中的存儲(chǔ)形式非常重要,有助于合理組織數(shù)據(jù),高效利用內(nèi)存.有助于理解和使用CIN,有助于理解和使用動(dòng)態(tài)鏈接庫.一般都會(huì)認(rèn)為只有大的數(shù)組結(jié)構(gòu)或者字符串才消耗大量的內(nèi)存,其實(shí)不然,由于LABVIEW在內(nèi)存中構(gòu)造數(shù)據(jù)的特殊形式,較小的數(shù)組或者字符串有時(shí)也會(huì)占用可觀的內(nèi)存.
對于一維數(shù)值型數(shù)組,它包括四個(gè)字節(jié)(I32)的數(shù)組長度,之后是連續(xù)的數(shù)據(jù)元素所占的空間。
對于二維的數(shù)值型數(shù)組,它包括兩個(gè)I32(8個(gè)字節(jié))表示數(shù)組行列長度,之后是按行存儲(chǔ)的元素序列。
正如我們看到的,LV在內(nèi)存中是一段連續(xù)的空間來存儲(chǔ)數(shù)據(jù)的,這樣當(dāng)需要增加數(shù)組長度的時(shí)候,由于內(nèi)存碎片的影響,LV可能不得不移動(dòng)整個(gè)數(shù)組到一個(gè)新的內(nèi)存位置。除了存儲(chǔ)實(shí)際數(shù)據(jù),LV還額外增加了數(shù)組長度(I32類型),所以,對一維數(shù)組,最大可以包括2的32次方-1個(gè)元素。
BOOLEAN型數(shù)據(jù)是字節(jié)型數(shù)據(jù),該字節(jié)非零則為TRUE,為0則為FALSE,BOOLEAN型數(shù)組在內(nèi)存中的分布看下圖。
同C語言一樣,字符串是一個(gè)字符型數(shù)組,不同的是,C字符串并不表明字符串長度,它是以 主站蜘蛛池模板: 墨竹工卡县| 蒙城县| 思南县| 罗城| 封开县| 青冈县| 罗平县| 滦平县| 广水市| 浮梁县| 邓州市| 鲁甸县| 德格县| 新田县| 福泉市| 神木县| 洛南县| 嵩明县| 宁德市| 牡丹江市| 柏乡县| 三台县| 安庆市| 永昌县| 黔江区| 鄱阳县| 台湾省| 南平市| 车致| 政和县| 澄城县| 凤阳县| 钦州市| 台东县| 阿尔山市| 长岛县| 沂源县| 宜都市| 丰城市| 嘉祥县| 揭阳市|