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
Flyer了。即便他们两对半开。那么是不是我们不能修正这个值了呢?没联系。既然微软让你看到这个玩意确定有地方改的。上网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.
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
}即便一个大广度的问题,这时,作为一种组织措施,“面向对象”不能帮我们些什么吗?