• <object id="wee46"></object>
  • <center id="wee46"><tt id="wee46"></tt></center><kbd id="wee46"></kbd>
  • <sup id="wee46"></sup>
  • 廈門IT培訓
    美國上市IT培訓機構

    13429669395

    嵌入式知識:怎么解決內存不足的問題

    • 時間:2020-11-04 13:56
    • 發布:廈門達內IT培訓
    • 來源:疑難解答

    雖然當今的嵌入式系統的內存比之以K計數的時代已經有了很大的提高,但是隨著軟件規模的增長,內存不足的問題依然時時困擾著系統架構師。有一些原則,架構師在進行設計決策的時候可以參考:

    1、虛擬內存技術

    有一些嵌入式設備需要處理巨大的數據量,而這些數據不可能全部裝入內存中。一些嵌入式操作系統不提供虛擬內存技術,比如WinCE4.2每個程序最多只能使用32M內存。對這樣的應用,架構師應該特別設計自己的虛擬內存技術。所謂的虛擬內存技術的核心是,將暫時不太可能使用的數據移出內存。

    這涉及到一些技術點:

    引用計數,正在使用的數據不能移出。

    使用預測,預測下一個階段某個數據的使用可能性。基于預測移出數據或者提前裝入數據。

    占位數據/對象。

    高速緩存。在復雜數據結果下緩存高頻率使用的數據,直接訪問。

    快速的持久化和裝載。

    2、兩段式構造

    在內存有限的系統里,對象構造失敗是必須要處理的問題,失敗的原因中最常見的則是內存不足(實際上這也是對PC平臺的要求,但是在實際中往往忽略,因為內存實在便宜)。兩段式構造就是一種常用而有效的設計。舉例來說:

    CMySimpleClass:

    class CMySimpleClass

    {

    public:

    CMySimpleClass();

    ~CMySimpleClass();

    ...

    private:

    int SomeData;

    };

    CMyCompoundClass:

    class CMyCompoundClass

    {

    public:

    CMyCompoundClass();

    ~CMyCompoundClass();

    ...

    private:

    CMySimpleClass* iSimpleClass;

    };

    在CMyCompoundClass的構造函數里初始化iSimpleClass對象。

    CMyCompoundClass::CMyCompoundClass()

    {

    iSimpleClass = new CMySimpleClass;

    }

    當創建CMyCompoundClass的時候會發生什么呢?

    CMyCompoundClass* myCompoundClass = new CMyCompoundClass;

    為CMyCompoundClass的對象分配內存

    調用CMyCompoundClass對象的構造函數

    在構造函數中創建一個CMySimpleClass的實例

    構造函數結束返回

    一切看起來都很簡單,但是如果第三步創建CMySimpleClass對象的時候發生內存不足的錯誤怎么辦呢?構造函數無法返回任何錯誤信息以提示調用者構造沒有成功。調用者于是獲得了一個指向CMyCompoundClass的指針,但是這個對象并沒有構造完整。

    如果在構造函數中拋出異常會怎么樣呢?這是個著名的噩夢,因為析構函數不會被調用,在創建CMySimpleClass對象之前如果分配了資源就會泄露。關于在構造函數中拋出異常可以單講一個小時,但是有一個建議是:盡量避免在構造函數中拋出異常。

    所以,使用兩段式構造法是一個更好的選擇。簡單的說,就是在構造函數避免任何可能產生錯誤的動作,比如分配內存,而把這些動作放在構造完成之后,調用另一個函數。比如:

    AddressBook* book = new AddressBook()

    If(!book->Construct())

    {

    delete book;

    book = NULL;

    }

    這樣可以保證當Construct不成功的時候釋放已經分配的資源。

    在最重要的手機操作系統Symbian上,二段式構造法普遍使用。

    3、內存分配器

    不同的系統有著不同的內存分配的特點。有些要求分配很多小內存,有的則需要經常增長已經分配的內存。一個好的內存分配器對嵌入式的軟件的性能有時具有重大的意義。應該在系統設計時保證整個系統使用統一的內存分配器,并且可以隨時更換。

    4、內存泄漏

    內存泄漏對嵌入式系統有限的內存是非常嚴重的。通過使用自己的內存分配器,可以很容易的跟蹤內存的分配釋放情況,從而檢測出內存泄漏的情況。

    版權聲明:轉載文章來自公開網絡,版權歸作者本人所有,推送文章除非無法確認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯系刪除或授權事宜。

    預約申請免費試聽課

    怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

    上一篇:51單片機的內部存儲結構是怎樣的?
    下一篇:嵌入式環境下軟件設計的特點

    UI設計怎么學?學完UI設計可以從事哪些工作?

    學好平面設計需要哪些知識

    快速改善UI設計的技巧有哪些

    零基礎如何入門UE交互設計?

    • 關注微信公眾號

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    江西省

    貴州省

    廣西省

    海南省

    深夜办公室完整版在线观看,中文文字幕在线电影,尹人在线最新香蕉视频,欧美,日韩,国产,专区