wince 下的記憶體切實上是分為三個區域性的. 先說這幾區域性的名字,物件儲存, 系統記憶體,過程記憶體.
準確來講,該當用下面公式解釋wince記憶體 = 系統記憶體 + (物件儲存 +
過程記憶體).這裡德記憶體也即便我們平時說的sdram,而我們的平台用的64m的sdram。
在wince系統的扼制面板系統中能夠看到系統內存在30m左右,然而硬體上sdram明明是64m,為什麼這裡只有30m呢?因為wince系統本身執行要挪借30m左右記憶體。這裡能夠把這區域性記憶體稱為系統記憶體。其實wince正常給我們用的記憶體只有30m左右,前提是你用的sdram是64m。
下?**頤薔途阜治魷率o碌惱?0m。也即便過程記憶體和存貯記憶體(物件存貯)。
過程內?**扌虢饈停幢憧曬┪頤塹墓逃玫哪詿妗?p>物件儲存是wince裡乙個新的觀念.
嵌入式wince壟斷系統尋常是用在花費電子上面, 例如pocket pc, 手機, pda等挪動裝備上.
這一類的裝備等閒都是有兩個電源的, 乙個是主電源(例如你的手機電池), 乙個是後備電池(拆開手機,電路板上能夠找到那個小電池).
後備電池的作用即便在主電源沒電的情形下,堅持壟斷系統的一些必需保留的資料, 例如登記表, 資料庫等.
而這些要保留的資料即便放在物件儲存裡的,能夠複製乙個檔案到wince下(sd卡,u盤例外),會覺察物件儲存挪借空間變大,到這裡,你該當會意物件儲存了。
目前全副wince記憶體分配有個打聽的觀念了,然而我們在平時利用經往往會遭到利用過程開發一段記憶體導致利用過程掛了的假象。這裡不管你是動態申請的還是幹嗎。萬一記憶體分配中過程記憶體過小。這裡前提是你的利用過程很大很混雜,這種假象確定會有的。
那麼怎麼能力申請到大的記憶體空間呢?當然你能夠在扼制面板中挪動那個分配過程記憶體和存貯記憶體大小的挪動條,然而這種情形在系統冷啟用後有還原成系統預設的htc
1.在config.bib中有個config 這裡的翔實內容能夠參看何宗建老師的書。在config欄位下面加入
fsrampercent=0x20202020
。這裡為什麼是0x20202020。能夠參看網上牛人的公式。fsrampercent是乙個4byte長度的十六進製制數, 我們用代數假想
fsrampercent = 0xqxyz, 其中q,x,y,z都是十六進製制數
那麼最後劃分給storage memory的大小 = ( q + x + y + z ) / 0x400 *
total_ram_size 以我平台例子能夠覺察storage memory =
(0x20+0x20+0x20+0x20)/0x400*64 = 3800kb.
2.網上也有人說動態分配不過這個措施我未曾試探過不懂得是不是獲勝的。其實我個人感受萬一動態分配很安寧的話確定是動態的好了s.shilinguwen.com,這麼能夠依據不同的利用來分配不同的過程記憶體大小。
typedef dword (*setsystemmemorydivision)(dword);
typedef bool
(*getsystemmemorydivision)(lpdword,lpdword,lpdword);
void setobjectmemoryspace(int nsize)
#ifdef _win32_wce
//從動態庫中獲得函式位址以設定物件儲存區的大小.
hinstance hdll = loadlibrary(_t("coredll.dll"));
setsystemmemorydivision setsystemmemorydivisionproc = null;
getsystemmemorydivision getsystemmemorydivisionproc = null;
if( null != hdll )
//獲得匯出函式位址
setsystemmemorydivisionproc =
(setsystemmemorydivision)getprocaddress(hdllwww.new3go.info,_t("setsystemmemorydivision"));
getsystemmemorydivisionproc =
(getsystemmemorydivision)getprocaddress(hdll,_t("getsystemmemorydivision"));
if(setsystemmemorydivisionproc &&
getsystemmemorydivisionproc)
dword dwstorepages = 0;
dword dwrampages = 0;
dword dwpagesize = 0;
bool bret =
(*getsystemmemorydivisionproc)(&dwstorepages,&dwrampages,&dwpagesize);
if(bret)
int npagecount = nsize/dwpagesize;
if(nsize%dwpagesize != 0)
npagecount++;
(*setsystemmemorydivisionproc)(npagecount);
setsystemmemorydivisionproc = null;
getsystemmemorydivisionproc = null;
freelibrary(hdll);
hdll = null;
#endif
}即便乙個大廣度的問題,這時,作為一種組織措施,「物件導向」不能幫我們些什麼嗎?
wince 記憶體釋放 解決WinCE記憶體不足問題
我們採用的ti的 omap3530,板上有256mb sdram 和 512mb nandflash.採用的是wince 6.0作業系統 執行應用程式時卻時不時出現嚴重的記憶體不足問題。在控制面板中查了記憶體情況,才有40mb可用,出了nk占用的30mb,其餘記憶體不知用到 了。google幾下,能...
wince記憶體分配
目前我們的實驗板可用 ram空間是 64m,在 wince 系統中對應的虛擬位址從 0x8c000000 0x8ff00000 我們來仔細分析一下這些寶貴的 ram資源是如何使用的。首先,系統啟動時會自動將映象 nk.nb0 拷貝到ram 中再執行,目前我們分配給 nk.nb0 的空間是 29m 0...
wince記憶體配置
wince的記憶體 包括sdram及flash 的配置包含兩個方面 源 包括c和彙編 中的定義,及系統配置檔案config.bib中的定義。源 中需要定義記憶體的物理及虛擬位址,大小,並初始化名為oemaddresstable的結構陣列,以告知系統實體地址與虛擬位址的對應關係,系統根據其設定生成mm...