如何指定最大和最小堆内存

作者:hoolee  

 

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

TARGET MemoryTest.exe

TARGETTYPE exe

UID 0x00000000 KMemoryTestUID3

SECUREID KMemoryTestUID3

VENDORID 0x00000000

CAPABILITY NONE

EPOCHEAPSIZE 0x5000 0x400000

EPOCSTACKSIZE 0x5000

 

 

在S60 3rd中,增大默认堆栈的大小

概叙
在S60第三版中,默认的堆栈大小为8k,它不能满足一些复杂的应用程序。

详细描叙
随着Symbian 9的到来,由于平台安全,导致系统在允许程序时需要更多的内存,所以默认堆栈由原来的8K增加到了20K。

实际上,8K已经被证实在大一点的S60应用程序中是远远不够的。堆栈大小足够,程序可以正常运行,内存溢出将带来很大的风险,在S60 3rd的平台库中,有一个新的特点,它可以稍微的增加一点堆栈,因此,使用小的堆栈也将危害到二进制的兼容性。

在S60 3rd的SDK中,推荐为所有应用程序增加堆栈大小为20K。应用程序需要重新编译来改变堆栈大小。

最大的用户线程堆栈大小为:0x14000 ~80K
每个程序最大的堆栈大小为:0x200000 ~2MB.

解决办法
改变堆栈大小不同于默认的8K,可以配置MMP文件中的epocstacksize申明:

epocstacksize stacksize

堆栈的大小字节数,可以指定为十进制,或者十六进制格式。使用这个申明,在WINSCW/WINS平台下是看不出效果的。
例如:添加下面的一行到MMP文件中,将增加堆栈大小到20K:

epocstacksize 0x5000

注:你也可以选择,在新线程创建时定义堆栈的大小。  

适用平台:
S60 3rd Edition

 



....

</code>
在上述代码中,应用程序描述了它所需要的最大和最小堆内存,分别是0x5000字节(20KB)和0x400000字节(4MB),现在该程序可以安全来分配一块3MB的堆空间。
Note: As documented, prior to S60 3rd Edition the EPOCHEAPSIZE statement has no effect on WINS32 platforms.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值