wince 下的記憶體實際上是分為三個部分的. 先說這幾部分的名字,物件儲存, 系統記憶體,程式記憶體. 準確來講,應該用下面公式說明wince記憶體 = 系統記憶體 + (物件儲存 + 程式記憶體).這裡德記憶體也就是我們平時說的sdram,而我們的平台用的64m的sdram。
在wince系統的控制面板系統中可以看到系統內存在30m左右,但是硬體上sdram明明是64m,為什麼這裡只有30m呢?因為wince系統本身執行要占用30m左右記憶體。這裡可以把這部分記憶體稱為系統記憶體。其實wince正常給我們用的記憶體只有30m左右,前提是你用的sdram是64m。
下面我們就仔細分析下剩下的這30m。也就是程式記憶體和儲存記憶體(物件儲存)。
程式記憶體不用解釋,就是可供我們的程式用的記憶體。
物件儲存是wince裡乙個新的概念. 嵌入式wince作業系統一般是用在消費電子上面, 比如pocket pc, 手機, pda等移動裝置上. 這一類的裝置一般都是有兩個電源的, 乙個是主電源(比如你的手機電池), 乙個是後備電池(拆開手機,電路板上可以找到那個小電池). 後備電池的作用就是在主電源沒電的情況下,維持作業系統的一些需要儲存的資料, 比如登錄檔, 資料庫等. 而這些要儲存的資料就是放在物件儲存裡的,可以複製乙個檔案到wince下(sd卡,u盤除外),會發現物件儲存占用空間變大,到這裡,你應該理解物件儲存了。
現在整個wince記憶體分配有個清楚的概念了,但是我們在平時運用時經常會遇到應用程式開闢一段記憶體導致應用程式掛了的現象。這裡不管你是動態申請的還是幹嗎。如果記憶體分配中程式記憶體過小。這裡前提是你的應用程式很大很複雜,這種現象肯定會有的。
那麼怎麼才能申請到大的記憶體空間呢?當然你可以在控制面板中滑動那個分配程式記憶體和儲存記憶體大小的滑動條,但是這種情況在系統冷啟動後有恢復成系統預設的了。就是他們兩對半開。那麼是不是我們不能修改這個值了呢?沒關係。既然微軟讓你看到這個玩意肯定有地方改的。上網google下很多辦法。這裡我介紹兩種:
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.
總體記憶體 total_ram_size
儲存空間大小 storagememeory =(q+x+y+z)×total_ram_size/0x400
程式空間大小 programmemeory =total_ram_size-storgememeory
假設開發板剩餘的sdram空間是32mb,那麼儲存空間為6mb,程式空間為26mb,計算如下:
storgememeory = (0x20+0x20+0x40+0x40)×32/0x400=6mb
programmemeory = 32 -6=26mb
這是理論計算值,實際值略有偏差。
2.網上也有人說動態分配不過這個辦法我沒有試驗過不知道是不是成功的。其實我個人覺得如果動態分配很穩定的話肯定是動態的好了,這樣可以根據不同的應用來分配不同的程式記憶體大小。
typedef dword (*setsystemmemorydivision)(dword);
typedef bool (*getsystemmemorydivision)(lpdword,lpdword,lpdword);
void setobjectmemoryspace(int nsize)
(*setsystemmemorydivisionproc)(npagecount);
}setsystemmemorydivisionproc = null;
getsystemmemorydivisionproc = null;
freelibrary(hdll);
hdll = null;
}#endif
}
Wince程式記憶體和儲存記憶體
wince 下的記憶體實際上是分為三個部分的 先說這幾部分的名字,物件儲存 系統記憶體,程式記憶體 準確來講,應該用下面公式說明 wince 記憶體 系統記憶體 物件儲存 程式記憶體 這裡德記憶體也就是我們平時說的 sdram 而我們的平台用的 64m的 sdram。在 wince 系統的控制面板系...
wince修改程式記憶體和儲存記憶體
找到config.bib檔案,目錄為x wince600 platform yc2440 files config.bib 在config段加入 fsrampercent 0x18181818 0x18 0x18 0x18 0x18 0x400 64m 6m storage mem 64m為系統ra...
Wince6 0 儲存記憶體與程式記憶體比例調整
wince600 platform files config.bib 找到 config 在autosize on後新增一行 fsrampercent 40404040 說明 fsrampercent 格式 fsrampercent number 預設值為0x80808080。指定為檔案系統分配的記...