symbian中如何指定最大和最小堆和栈内存

来源:互联网 发布:云泥沙 知乎 编辑:程序博客网 时间:2024/06/08 10:04

 

在一台手机(或SDK的模拟器)上会有一定的物理内存大小,而你的应用程序将获取一部分做为堆内存使用。
当你程序启动后产生进程,会有一个预先分配的堆给其使用。S60第三版设备上缺省大小是4KB,早期的S60平台上是1KB。
根据需要,应用程序可以自由分配更多的堆内存,程序能使用的堆大小可在1M范围内动态增加,这是操作系统所规定最高极限了,呵呵。
如果试图分配的内存超过所能最大限制,将引发KErrNoMemory异常。
大部分Symbian C++程序在这样的堆内存安排下可以正常工作,但有时间我们需要更大的堆内存来工作。我们可以通过MMP文件中使用EPOCHEAPSIZE命令来指定最大和最小堆内存。

例如

TARGET MemoryTest.exe

TARGETTYPE exe

UID 0×00000000 KMemoryTestUID3

SECUREID KMemoryTestUID3

VENDORID 0×00000000

CAPABILITY NONE

EPOCHEAPSIZE 0×5000 0×400000

EPOCSTACKSIZE 0×5000
….

在上述代码中,应用程序描述了它所需要的最大和最小堆内存,分别是0×5000字节(20KB)和0×400000字节(4MB),现在该程序可以安全来分配一块3MB的堆空间。 

怎么增加应用程序默认堆大小呢

 

The default heap size of an application is 1MB, that means on target if you application tried to allocate more than 1MB memory, the allocation will fail. Probably new (ELeave) will leave.

What if you really want your application to allcoate more than 1MB memory? For example, you are developing an image processing application which needs to load big pictures.

There’s a way to use a user define heap instead of the default heap, you can do this like:

GLDEF_C TInt E32Main()
{
RHeap *heap = UserHeap::ChunkHeap( NULL, 1024 * 4, 1024 * 1024 * 2 ); // 2MB
if( heap )
{
User::SwitchHeap( heap );
}
TInt ret = EikStart::RunApplication( NewApplication );
if ( heap )
{
heap->Close();
}
return ret;
}

You switch the heap to your own one, which allow you to allocate 2MB in this case.

原创粉丝点击