當前位置:編程學習大全網 - 源碼下載 - 如何避免WinCE 內存分配失敗?

如何避免WinCE 內存分配失敗?

嵌入式設備與桌面PC的壹個顯著不同是它的應用程序中通常需要直接訪問某壹段物理內存,這在驅動程序中對物理內存的訪問尤為重要。尤其是像ARM體系結構下,I/O端口也被映射成某壹個物理內存地址。而且與桌面版本Windows相比,WinCE也提供相對簡單的物理內存訪問方式,無論是驅動程序還是應用程序都可以通過API訪問某壹段物理內存。

壹般來說,運行壹個WinCE需要ROM(只讀存儲器)和RAM(隨機存儲器)。但在WinCE系統中,ROM和RAM的使用還是稍微有些不同於個人電腦環境。RAM在WinCE 系統中被分為兩個區域:第壹個是程序存儲區(Program Memory),也叫做系統堆(System Heap),程序存儲區有點像個人電腦中的RAM,它為正在運行的應用程序保存堆和棧的內容。第二個是對象存儲區(Object Store),它有點像壹個永久的虛擬RAM磁盤。不同於PC上的虛擬RAM磁盤,對象存儲區保留存儲的文件甚至可以在系統被關閉以後。

在WinCE系統中,存儲在ROM的程序能以現場執行(Execute in Place,XIP)的方式運行。換句話說,程序可以直接從ROM中執行而不必先加載到RAM中再執行。這種能力對嵌入式系統來說,具有兩個方面的巨大優勢,壹是代碼直接從ROM中執行意味著程序代碼不會占據更有價值的RAM;二是程序在執行前也不必先復制到RAM中,這樣就只需要很少的時間來啟動壹個應用程序。而不在ROM中的但是被包含在對象存儲區或閃存卡中的程序將不能以現場方式執行,它們將被復制到RAM中再執行。

(2)虛擬內存

電腦中所有運行的程序都需要經過內存執行,如果執行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,Windows運用了虛擬內存技術,以緩解內存的緊張。和大多數操作系統壹樣,WinCE也實現按需調頁的虛擬內存機制。WinCE是32位的操作系統,支持4GB的虛擬地址空間。系統調用虛擬內存API來為其它類型內存分配內存,包括堆和棧。WinCE虛擬內存頁可以處在三種狀態:自由(free),保留(reserved),或被提交(committed)。

WinCE提供兩種虛擬地址映射方法,分別為靜態映射和動態映射,靜態映射的虛擬地址空間只能由內核訪問,而動態映射的地址空間可以由用戶模式的應用程序訪問。WinCE系統使用微處理器的內存管理單元(MMU)來處理虛擬地址和物理地址間的實時轉換。意思是說:壹旦WinCE系統的MMU開始工作,

CPU就不再直接訪問物理內存了,對於運行在x86和ARM系列CPU上的CE內核來說,必須先確立物理內存地址和虛擬內存地址的映射關系。

  • 上一篇:股票莊家坐莊有什麽特點
  • 下一篇:培訓PHP都學什麽
  • copyright 2024編程學習大全網