The embodiment of the invention discloses a dynamic stack memory management method and device. The stack includes dynamic memory management method, determine the stack pointer to the stack space position between the top position of the current task stack space free memory, if free memory is greater than the preset threshold, the release between the stack pointer position to the top of the stack memory page, the stack pointer location starting position reset memory page for stack space top position. In the technical scheme of the embodiment of the invention, the stack pointer between the release position to the top position of the stack memory page, synchronization to achieve the stack pointer and the stack space, timely release the waste of memory, improve the utilization rate of the embedded system memory.
【技术实现步骤摘要】
一种动态堆栈内存管理方法和装置
本专利技术涉及嵌入式系统
,尤其涉及一种动态堆栈内存管理方法和装置。
技术介绍
堆栈是高级编程语言的基础设施,是函数运行的基础。当今的CPU(CentralProcessingUnit,中央处理器)设计都提供了对堆栈的支持,比如,intel处理器就是通过sp(stackpointer,堆栈指针)寄存器来实现堆栈功能的。CPU一般可同时支持多个任务进程,每个任务进程各自独立运行,需提供相应的堆栈用于该任务进程存储数据。对于每个任务进程,在执行过程中,通常都会涉及到多个函数的调用关系。例如常见的APP客户端软件,主界面函数首先被启动运行,当用户操作进行某个子功能界面时就由主界面函数调用对应的子功能界面的函数运行。在用户退出子功能界面而返回主界面时,其对应函数也退出。函数调用过程对堆栈的使用方式如下,如图5所示,以intel平台下,函数a调用函数b,函数b又调用函数c的情形,来说明堆栈的变化过程:函数a运行时堆栈指针sp处在位置a;函数a调用函数b之后,堆栈指针sp向下移动到了位置b;函数b调用函数c之后,堆栈指针sp向下移动到了位置c;函数c退出后,堆栈指针sp向上移动到了位置b;函数b退出后,堆栈指针sp向上移动到了位置a。由图5可知,随着函数调用层次的加深,堆栈指针sp不断向下移动,即堆栈空间也随着增大;随着函数不断地退出,堆栈指针sp不断向上移动。虽然函数已经不再运行,但曾经分配给该函数的堆栈空间并没有释放。也就是说,堆栈空间只增不减,堆栈空间与堆栈指针并不同步,不能真实地反映程序实际使用的堆栈大小,这就导致在没有交 ...
【技术保护点】
一种动态堆栈内存管理方法,其特征在于,所述方法包括:确定当前任务的堆栈空间的堆栈指针位置至堆栈空间顶部位置之间的空闲内存;如果所述空闲内存大于预置阈值,则释放所述堆栈指针位置至所述堆栈空间顶部位置之间的内存页;将所述堆栈指针位置所在内存页的起始位置重置为堆栈空间顶部位置。
【技术特征摘要】
1.一种动态堆栈内存管理方法,其特征在于,所述方法包括:确定当前任务的堆栈空间的堆栈指针位置至堆栈空间顶部位置之间的空闲内存;如果所述空闲内存大于预置阈值,则释放所述堆栈指针位置至所述堆栈空间顶部位置之间的内存页;将所述堆栈指针位置所在内存页的起始位置重置为堆栈空间顶部位置。2.如权利要求1所述的方法,其特征在于,所述确定当前任务的堆栈空间的堆栈指针位置至堆栈空间顶部位置之间的空闲内存,包括:每隔预置时长获取所述当前任务的堆栈空间的堆栈指针位置和堆栈空间顶部位置;计算所述堆栈指针位置至所述堆栈空间顶部位置之间的空闲内存。3.如权利要求1或2所述的方法,其特征在于,所述确定当前任务的堆栈空间的堆栈指针位置至堆栈空间顶部位置之间的空闲内存之前,还包括:为正在运行的所有任务建立任务链表,并设置任务指针,指向至少一个任务,作为当前任务。4.如权利要求3所述的方法,其特征在于,所述将所述堆栈指针位置所在内存页的起始位置重置为堆栈空间顶部位置之后,还包括:将所述任务指针设置为所述任务链表中的下一个任务,以将下一个任务更新为当前任务,并返回执行空闲内存的确定操作。5.如权利要求4所述的方法,其特征在于,所述确定当前任务的堆栈空间的堆栈指针位置至堆栈空间顶部位置之间的空闲内存之后,还包括:如果所述空闲内存不大于所述预置阈值,则将所述任务指针设置为所述任务链表中的下一个任务,以将下一个...
【专利技术属性】
技术研发人员:李小庆,
申请(专利权)人:深圳创维数字技术有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。