移动设备上变量,堆,栈的管理

来源:互联网 发布:软件测试培训机构 编辑:程序博客网 时间:2024/03/28 22:17
  
移动设备上变量,堆,栈的管理
                      Eddy,翻译于07.5.16
本主题着重讲解应用程序在管理静态和全局变量,堆,栈时怎么去分配内存.
1)      静态和全局变量
静态和全局变量在程序开始时被创建,程序结束时被释放.
注意:在程序中,应该减少静态与全局变量的使用,尤其在分配大量内存或数组时.
2)      (也叫堆栈)
在移动设备上创建一个程序,栈便被创建,作为一个线程标识该程序.因此,每一个新线程都是作为一个独立的线程在程序中被创建的.
为了存储在程序中传给函数与变量的参数值,栈提供了58KB大小的可用空间.当程序结束时,申请的栈空间自动释放.
不能像创建堆一样创建私有栈,且栈的大小不能增加,超过58KB程序就会报错.
3)     
基于移动设备的每个程序开始时,都会创建一个默认堆,但是这个堆不能被删除,当程序结束时会自动释放掉.堆内存的申请与释放主要有以下方法:
C++: new , delete
C :malloc, calloc,realloc,free
Windows CE函数中: LocalAlloc,HeapAlloc,LocalFree,HeapFree
      分配内存后,一定要检查是否分配成功,切记!如果内存分配失败,可以通过调用函数SHCloseApps来释放附加的内存,从而得到程序需要的内存空间.(此处可能有误,原文如下
    If your memory allocation fails, you can ask the shell to free additional memory by calling the SHCloseApps function and passing the amount of memory that your application requires.)
       重复申请或者删除内存,堆空间会被破坏,重复申请会导致多余的内存和地址空间被利用.当程序在设备上长时间运行时,影响很大.
 当程序需要重复申请或者删除内存时,应该用Windows CE函数HeapCreate在程序中创建一个私有堆空间.与默认的堆空间不同,私有堆空间在堆上可以被完全删除.当程序需要对来自命令行的Windows CE WM HIBERNATE消息作出响应时,删除私有堆空间是个不错的选择.( If your application requires repeated allocation and deallocation of heap memory, you should consider using the Windows CE HeapCreate function to create a private heap in your application. Unlike the default heap, private heaps can be deleted to free all memory on that heap. Deleting private heaps is a good way for an application to respond to the Windows CE WM_HIBERNATE message from the shell.)
 
  
 
原创粉丝点击