亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Z—Stack內(nèi)存管理算法的改進(jìn)研究

        2017-04-18 18:15:39鄧慧郭改枝
        軟件導(dǎo)刊 2017年2期

        鄧慧 郭改枝

        摘要 研究了ZigBee協(xié)議棧中的內(nèi)存管理算法,并結(jié)合典型內(nèi)存管理算法TLSF(Two-level Segregated Fit)兩位標(biāo)志位管理內(nèi)存思想,對Z-Stack內(nèi)存管理算法進(jìn)行了改進(jìn),該改進(jìn)算法同時又對內(nèi)存分配和釋放時的指針進(jìn)行動態(tài)修改。IAR調(diào)試驗(yàn)證分析表明,該改進(jìn)算法提高了內(nèi)存分配速度和內(nèi)存利用率。

        關(guān)鍵詞 ZigBee;內(nèi)存管理;內(nèi)存利用率;內(nèi)存分配速度

        DOI DOI: 10.11907/rjdk.162529

        中圖分類號: TP311

        文獻(xiàn)標(biāo)識碼: A 文章編號 文章編號: 16727800(2017)002005103

        0 引言

        國內(nèi)外對Z-Stack內(nèi)存管理算法研究較少,現(xiàn)有的文獻(xiàn)[12]只是原理闡述,并沒有作出改進(jìn)。然而,Z-Stack內(nèi)存管理算法又存在內(nèi)存資源有限、內(nèi)存分配速度慢等問題。本文針對上述問題對Z-Stack內(nèi)存管理算法進(jìn)行了改進(jìn)。通過動態(tài)修改指針和使用多位標(biāo)志位,優(yōu)化Z-Stack內(nèi)存管理算法,部分解決了低成本、內(nèi)存資源有限的ZigBee嵌入式系統(tǒng)內(nèi)存利用率和分配速度問題。

        1 Z-Stack內(nèi)存管理算法分析

        1.1 內(nèi)存初始化

        實(shí)際應(yīng)用中,通常根據(jù)ZigBee設(shè)備功能不同而分配不同大小的內(nèi)存空間,本文以協(xié)調(diào)器(MAXMEMHEAP =3072B)為例進(jìn)行算法分析。

        在算法中,每次申請內(nèi)存將第一個2字節(jié)(2B)設(shè)置為內(nèi)存控制頭。其中最高位為標(biāo)志位,標(biāo)識以此內(nèi)存分配控制頭開始的內(nèi)存區(qū)域是否被使用。根據(jù)Z-Stack的配置,小塊內(nèi)存大小設(shè)置為232B,大塊和小塊之間的分界區(qū)為2B,還有避免內(nèi)存泄漏2B,剩余字節(jié)數(shù)為大塊內(nèi)存2836字節(jié)。Z-Stack內(nèi)存初始化具體步驟如下:①將指針移動到內(nèi)存塊的最后2B位置,數(shù)值設(shè)置為0以避免內(nèi)存溢出;②將頭指針移動到內(nèi)存塊的起始位置,設(shè)置小塊內(nèi)存大小為232;③將指針移動到小塊內(nèi)存結(jié)束處,設(shè)置大塊內(nèi)存大小為2838;④在大塊內(nèi)存起始處,申請只有控制頭的2B空間,為了避免小塊內(nèi)存與大塊內(nèi)存合并分界區(qū),將大塊內(nèi)存大小修改為2836。

        內(nèi)存初始化完成之后如圖1所示。用箭頭標(biāo)出內(nèi)存塊的標(biāo)志位為1,其它部分內(nèi)存塊標(biāo)志位都為0,內(nèi)存具體大小為條形框中的數(shù)值。

        1.2 動態(tài)內(nèi)存分配和釋放

        內(nèi)存分配主要分為兩個階段:①空閑內(nèi)存區(qū)間查找階段[3];②修改內(nèi)存控制頭信息。

        動態(tài)內(nèi)存分配步驟如下: ①檢查申請內(nèi)存的大小(size):如果size小于等于16,則從小塊內(nèi)存開始查找;否則,從大塊內(nèi)存開始查找;②如果查找到的內(nèi)存塊正在使用,則累加標(biāo)志位coal置0(不累加),繼續(xù)查找下一塊;否則判斷當(dāng)前內(nèi)存是否大于等于size。如果大于等于size,則跳出循環(huán);否則,記錄當(dāng)前指針,繼續(xù)尋找下一塊空閑內(nèi)存并進(jìn)行合并,直到當(dāng)前內(nèi)存大于等于size或查找到避免內(nèi)存溢出塊才跳出循環(huán);③如果該塊空閑內(nèi)存比size大4B或更多,則進(jìn)行內(nèi)存分割;④如果申請內(nèi)存成功,則將新申請到的內(nèi)存標(biāo)志位置1,返回可用內(nèi)存空間指針;否則,指針返回NULL。

        動態(tài)內(nèi)存釋放步驟如下:①內(nèi)存指針向上移動一個單位;②將標(biāo)志位置0;③判斷指向小塊內(nèi)存的指針是否大于當(dāng)前指針:如果大于當(dāng)前小塊指針,則將該指針調(diào)整到當(dāng)前指針位置。

        2 Z-Stack內(nèi)存管理算法改進(jìn)與實(shí)現(xiàn)

        2.1 動態(tài)修改指針

        在Z-Stack內(nèi)存管理算法中,每一次內(nèi)存分配都是從小塊或大塊內(nèi)存的開始處查找,而不是從第一個可分配內(nèi)存空間開始查找,嚴(yán)重影響了查找速度。本文基于此,在內(nèi)存分配和釋放時,將起始查找指針進(jìn)行動態(tài)修改,避免申請小塊或大塊靠下部分內(nèi)存時,多次查找小塊或大塊靠上部分已使用內(nèi)存塊而浪費(fèi)時間。

        內(nèi)存申請時,如果size≤16,則從小塊內(nèi)存開始查找;否則,從大塊內(nèi)存開始查找。當(dāng)查找到合適的內(nèi)存塊時,判斷該內(nèi)存塊是否大于等于size。當(dāng)該塊內(nèi)存比size大4B或更多時,進(jìn)行內(nèi)存分割。內(nèi)存分割后,如果size≤16,則小塊指針修改為分割后未使用內(nèi)存起始處;否則,則修改大塊指針為分割后未使用內(nèi)存起始處。

        當(dāng)內(nèi)存釋放時,如果是分界區(qū)和避免內(nèi)存溢出塊,則指針不修改。否則,如果小塊指針大于當(dāng)前指針,則將小塊指針修改到當(dāng)前指針處;否則,大塊指針大于當(dāng)前指針,則將大塊指針修改到當(dāng)前指針處。

        申請內(nèi)存時,向下修改指針;釋放內(nèi)存時,向上修改指針。這樣對大塊和小塊內(nèi)存指針進(jìn)行動態(tài)修改,可以使得下次申請內(nèi)存時從第一塊未使用的內(nèi)存開始查找,避免了原算法從大塊或小塊開始處查找。動態(tài)修改指針分為內(nèi)存分配和釋放兩部分,如圖2和圖3所示。

        按照上述內(nèi)存分配程序流程執(zhí)行,在IAR調(diào)試程序時得到圖4和圖5結(jié)果。綠色代碼行表示下步執(zhí)行到該行。圖4表明內(nèi)存分割后,向下修改小塊指針。圖5表明內(nèi)存分割后,向下修改大塊指針。結(jié)果表明指針向下修改成功。

        按照上述內(nèi)存釋放的程序流程執(zhí)行,在IAR調(diào)試程序時得到圖6和圖7結(jié)果。圖6和圖7下一步都會執(zhí)行綠色代碼行。圖6表明小塊指針大于當(dāng)前指針,將小塊指針修改到當(dāng)前指針處;圖7表明大塊指針大于當(dāng)前指針,將大塊指針修改到當(dāng)前指針處。

        2.2 多位標(biāo)志位

        內(nèi)存分配時,如果申請1B大小,先查看分界區(qū)和避免內(nèi)存溢出塊中后一個字節(jié)是否使用。如果沒有使用,則返回分界區(qū)或避免內(nèi)存溢出的指針;否則,按照原算法查找。按照改進(jìn)算法,可以節(jié)省4B節(jié)空間,提高內(nèi)存利用率0.13%。本文以3072B為例,如果內(nèi)存空間更小,則內(nèi)存利用率會更高。

        在內(nèi)存管理中,原算法只用到了一位標(biāo)志位,不能很好利用有限的內(nèi)存空間。借鑒TLSF算法[45]的兩位標(biāo)志位思想,使用多位標(biāo)志位實(shí)現(xiàn)對內(nèi)存空間的管理,以提高內(nèi)存空間利用率,減少內(nèi)存碎片。改進(jìn)后的算法用控制頭2B中最高3位表示標(biāo)志位,具體方法如下:①普通塊(除了分界區(qū)和避免內(nèi)存泄露的兩塊內(nèi)存):未使用的用000表示,使用的用100表示;②分界區(qū):未使用的用101表示,使用的用111表示;③避免內(nèi)存泄露塊:未使用的用001表示,使用的用011表示。

        改進(jìn)算法的內(nèi)存初始化完成后,控制頭后13位表示內(nèi)存大小的具體數(shù)值如圖8條形框中所示,3位標(biāo)志位為圖8箭頭右邊所示。

        先判斷分界區(qū)和避免內(nèi)存溢出塊是否使用,如果使用,則按照原算法基本思想執(zhí)行。如果第一位標(biāo)志位為0并且第三位標(biāo)志位為1,則返回空,說明沒有查找到合適空間用來分配;如果查找到分界區(qū),按照原算法思想跳過該內(nèi)存區(qū),在大塊內(nèi)存繼續(xù)查找。多位標(biāo)志位程序流程如圖9所示。

        3 結(jié)語

        本文對Z-Stack內(nèi)存管理算法進(jìn)行了改進(jìn),在調(diào)試(debugger)模式下選擇Auto查看變量的變化值。分析了變量值的正確性,證明改進(jìn)算法在保證原算法正常使用的基礎(chǔ)上,Z-Stack能夠穩(wěn)定工作,沒有出現(xiàn)內(nèi)存溢出現(xiàn)象,減少了內(nèi)存空間的浪費(fèi),提高了協(xié)議棧的處理速度,有效解決了Z-Stack內(nèi)存利用率和內(nèi)存分配速度兩大重要問題。

        參考文獻(xiàn):

        [1] 吳瑛.ZigBee通信協(xié)議棧中的內(nèi)存和時間管理技術(shù)研究[J].計算機(jī)時代,2008(9):6062.

        [2] FORTINO G,GALZARANO S,GIANNANTONIO R,et al.Spinebased application development on heterogeneous wireless body sensor networks[EB/OL].http://xueshu.baidu.com/s?wd=paperuri:(2f7ac6f1d337f00f9c1ac3389b808d15)&filter,2010.

        [3] 王冬慧,韓建民,莊嘉琪.基于線段樹的高效內(nèi)存管理算法及其空間優(yōu)化[J].計算機(jī)應(yīng)用,2015,35(12):33683373.

        [4] 吳文峰.嵌入式實(shí)時系統(tǒng)動態(tài)內(nèi)存分配管理器的設(shè)計與實(shí)現(xiàn)[D].重慶: 重慶大學(xué),2013.

        [5] 陳君,樊皓,吳京洪.基于TLSF算法改進(jìn)的動態(tài)內(nèi)存管理算法研究[J].網(wǎng)絡(luò)新媒體技術(shù),2016(3):4649.

        (責(zé)任編輯:杜能鋼)

        日本最新一区二区三区在线视频| 无套内谢孕妇毛片免费看看| 亚洲欧美中文在线观看4| 久久露脸国产精品WWW| 国产精品又黄又爽又色| 色久悠悠婷婷综合在线| 性按摩xxxx在线观看| 久久精品无码专区免费青青| 91精品国产福利尤物免费| 亚洲妇女av一区二区| 女同一区二区三区在线观看 | 丰满人妻猛进入中文字幕| 国产超碰人人做人人爽av大片 | 精品一区二区三区国产av| 爽爽影院免费观看| 女邻居的大乳中文字幕| 在线国产小视频| 日本一区二区亚洲三区| 国产麻豆一区二区三区在| 国产高清av在线播放| 国产欧美一区二区精品仙草咪| 欧洲日韩视频二区在线| 在线免费午夜视频一区二区| 亚洲一区二区在线观看网址 | 91久久精品一区二区喷水喷白浆| 亚洲国产综合人成综合网站| 中国无码人妻丰满熟妇啪啪软件| 国内精品无码一区二区三区| 丰满少妇又紧又爽视频| 国产精品女丝袜白丝袜美腿| 中文无码人妻有码人妻中文字幕| 久久久无码中文字幕久...| 亚洲色AV性色在线观看| 女同性恋看女女av吗| 亚洲中国精品精华液| 摸进她的内裤里疯狂揉她动视频| 亚洲两性视频一三区| 亚洲激情一区二区三区视频| 日本三级香港三级人妇99| 精品人妻伦九区久久aaa片69| 国产亚洲精品国产福利在线观看 |