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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Web訪問時的內(nèi)存丟失問題

          嵌入式Web訪問時的內(nèi)存丟失問題

          作者: 時間:2009-11-19 來源:網(wǎng)絡(luò) 收藏

          4 的解決
          由于系統(tǒng)的管理默認采用“2的冪”的分配方法,這就造成了空間的巨大浪費,當某些應(yīng)用程序要申請較大的連續(xù)空間時,卻不能滿足。為了解決這個,專門為uClinux內(nèi)核設(shè)計了可選的內(nèi)存分配器。不同的內(nèi)核版本,這個可選的內(nèi)存分配器不同,一般是page_alloc2和kmalloc2。
          page_alloc2能解決缺省的分配方法造成的浪費。雖然它也是使用“2的冪”的分配方法,但它是按頁(每頁4 096B,即4 KB)分配的,分配的內(nèi)存大小如果已經(jīng)滿足了要求,則只是將當前的一頁分配出去,其他的就不再分配。還是一個65 KB的應(yīng)用程序,如果使用這種方法,就只是分配68 KB(≥65 KB,且為整頁)即可,這樣就能節(jié)省60 KB的空間。
          page_alloc2還采取了一些避免內(nèi)存碎片的方法。它將所有的兩頁(8 KB)或更少的內(nèi)存需求從空閑內(nèi)存開始部分向上分配,所有大的內(nèi)存需求從剩余內(nèi)存的末尾部分開始向下分配。這樣防止了網(wǎng)絡(luò)緩存等的臨時分配,避免了內(nèi)存碎片的出現(xiàn)。同時,它支持一次申請超過1 MB的內(nèi)存空間,這對一些大的應(yīng)用程序是很好的支持。采用此方法后,在系統(tǒng)運行過程中,并未出現(xiàn)過頁面出錯問題。通過free命令查看內(nèi)存分配如表2所列。

          本文引用地址:http://www.ex-cimer.com/article/152276.htm

          結(jié) 語
          系統(tǒng)應(yīng)用日益廣泛的情況下,本文結(jié)合在多支點觸發(fā)系統(tǒng)中的應(yīng)用,介紹了出現(xiàn)的問題以及它的解決方法。在實際應(yīng)用中,新的內(nèi)存分配方法能讓系統(tǒng)穩(wěn)定地工作,但是從表2可以發(fā)現(xiàn):采用“page_alloc2'’的內(nèi)存分配方法時,系統(tǒng)的Cache較小,這就造成了頁面有一定的延時。而“2的冪”的分配方法,系統(tǒng)的Cache較大,訪問速度較快。從這個對比得知,在反應(yīng)時間要求不是很高的情況下,“page_alloc2”的內(nèi)存分配方法更適合小內(nèi)存的系統(tǒng);而“2的冪”的分配方法更合適那些內(nèi)存足夠大的嵌入式系統(tǒng)。系統(tǒng)開發(fā)者可以根據(jù)實際情況采用不同的方案。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 4 下一頁

          評論


          相關(guān)推薦

          技術(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); })();