symbian中如何指定最大和最小堆和栈内存
2008-04-10 11:04
288 查看
在一台手机(或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.
相关文章推荐
- 如何指定最大和最小堆内存
- 如何在遍历目录时指定目录的最大层数
- 如何指定最大和最小堆内存
- 如何使用ASP设置指定站点CPU最大使用程度
- [vim]如何在打开文件时跳到指定行号?
- DELPHI如何将数据导出到指定格式的EXCEL模版
- Spring MVC中如何指定某个类或方法自适配地响应某个HTTP请求?
- 关于如何查找数组中和最大的子序列
- 有效Log4j按指定级别定向输出日志到指定的输出文件地址配置Threshold,log4j中如何屏蔽父logger输出源rootlogger的additivity配置,log4j向多个文件记录日志
- 如何替换指定位置的字符串(另附String类常用方法)
- linux下c代码如何把指定文件作为附件,通过evolution发送邮件
- [WinForm每日一帖] 如何选中下拉框中指定的数据
- VC++ 如何在显示对话框的时候,指定焦点控件!
- 如何在netbeans下指定jdk
- 导入SHP文件时如何标注指定属性字段
- 将行信息带入后台或者其他页面,如何迭代循环输出form中指定list中的对象
- 如何使用SVN checkout到某个项目的指定版本(Win 10系统)
- 如何使log文件达到指定大小就转储(logrotate)