CN101266540A - 信号处理算法中的动态内存处理操作的方法及装置 - Google Patents

信号处理算法中的动态内存处理操作的方法及装置 Download PDF

Info

Publication number
CN101266540A
CN101266540A CNA2008101048727A CN200810104872A CN101266540A CN 101266540 A CN101266540 A CN 101266540A CN A2008101048727 A CNA2008101048727 A CN A2008101048727A CN 200810104872 A CN200810104872 A CN 200810104872A CN 101266540 A CN101266540 A CN 101266540A
Authority
CN
China
Prior art keywords
space
stack
heap
memory
size
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2008101048727A
Other languages
English (en)
Inventor
邓昊
冯宇红
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Vimicro Corp
Original Assignee
Vimicro Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Vimicro Corp filed Critical Vimicro Corp
Priority to CNA2008101048727A priority Critical patent/CN101266540A/zh
Publication of CN101266540A publication Critical patent/CN101266540A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

公开了一种数字信号处理算法中动态内存处理操作的方法及装置,为了解决现有技术中动态内存分配和释放操作不符合TI XDAIS标准使得可靠性差的问题,本发明公开的方法包括:数字信号处理算法的外部主程序申请两块固定位置和尺寸的内存空间作为堆空间和栈空间;执行数字信号处理算法的核心实现代码时,在所述堆空间和栈空间内进行内存处理操作,正是由于执行数字信号处理算法的核心实现代码时,在主程序申请的固定位置和尺寸的堆空间和栈空间内进行内存处理操作,使得具有很好的可靠性。

Description

信号处理算法中的动态内存处理操作的方法及装置
技术领域
本发明属于数字信号处理领域,特别涉及信号处理算法中的动态内存处理操作的方法及装置。
背景技术
数字信号处理算法的核心实现代码中经常包含动态内存的分配和释放操作,这些操作在参考代码中一般用C的标准库函数实现,常用的库函数有malloc(),calloc(),free()和alloca()。高效,安全,灵活的在嵌入式平台上实现动态内存的分配和释放,是这些算法成功的移植到这些平台的前提。
直接使用C标准库函数,由相应的C编译器负责它们的具体操作是最简单,最直接的实现方式,但是多数嵌入式处理器的C编译器都不支持alloca(),且手工实现与C标准库函数完全兼容的alloca()有相当的复杂度。此外出于成本和系统复杂度的考虑,嵌入式系统中可能没有具备内存管理能力的操作系统,而是根据自身系统的特点以一种特定方式实现了简单的malloc()和free()函数。虽然可以基于malloc()实现其它内存分配函数,但在数字信号处理算法的核心代码中包含内存分配和释放操作是不符合算法代码移植到嵌入式系统的一般实现原则(即:TI XDAIS标准)的。这种实现机制主要的缺点如下:
可靠性差:系统没有实现对内存操作的严格控制,无法知道算法的核心实现代码在实际运行中究竟使用了多少堆栈空间,是否有足够多的资源满足动态内存的需求。如果算法核心代码中存在内存泄漏,或者需要的堆栈空间超过可用系统资源,出现内存操作失败或错误,会导致运算结果错误,系统崩溃等严重后果。
发明内容
为了解决现有技术中动态内存分配和释放操作不符合TI XDAIS标准使得可靠性差的问题,本发明实施例提供了信号处理算法中的动态内存处理操作的方法,应用于嵌入式平台上,包括:
数字信号处理算法的外部主程序申请两块固定位置和尺寸的内存空间作为堆空间和栈空间;
执行数字信号处理算法的核心实现代码时,在所述堆空间和栈空间内进行内存处理操作。
同时本发明实施例还提供一种信号处理算法中的动态内存处理操作的方法及装置,应用于嵌入式平台上,包括:
申请模块:用于数字信号处理算法的外部主程序申请两块固定位置和尺寸的内存空间作为堆空间和栈空间;
处理模块:用于执行数字信号处理算法的核心实现代码时,在所述堆空间和栈空间内进行内存处理操作。由上述本发明提供的具体实施方案可以看出,正是由于执行数字信号处理算法的核心实现代码时,在主程序申请的固定位置和尺寸的堆空间和栈空间内进行内存处理操作,使得本方案具有很好的可靠性。
附图说明
图1为本发明提供的第一实施例方法流程图;
图2为本发明提供的第二实施例系统结构图。
具体实施方式
本发明公开的信号处理算法中的动态内存处理操作的方法应用于嵌入式平台上,其基本思想是数字信号处理算法的核心实现代码中不包含任何真实的内存分配和释放操作,由调用算法核心实现代码的外部主程序提供大小固定的两块分别作为堆空间和栈空间的可用内存空间。执行核心实现代码时,在主程序申请的堆空间和栈空间内进行内存处理操作。核心实现代码中用到的动态内存均取自这两块内存空间,不直接进行系统内存分配和释放操作。算法核心代码将这两块空间的首地址指针和尺寸存于特定的非静态堆、栈信息数据结构体中。核心代码中采用前、后向移动数据地址指针和增、减内存使用量计数器的方式来模拟内存的分配和释放。这种实现方法符合TI XDAIS标准,明确了算法的资源需求。因此算法的实现代码具有很好的可靠性。
进一步检测内存空间的使用量。一旦出现内存需求量超出实际拥有量的情况,停止内存分配,退出算法核心代码的执行或开始新的执行周期。本发明根据内存空间的生命周期来区分堆空间和栈空间。堆空间中存放的各种数据占用固定尺寸,固定位置的内存空间,算法核心代码的执行过程中不对堆空间中的数据进行释放和搬移操作;栈空间的释放采取恢复栈信息结构体数据来完成,且根据函数本身的执行过程和调用情况采用不同的实现方式,极大的减少了实现复杂度。
本发明的这种实现机制符合TI XDAIS标准,具有可靠性高,移植性好,可重入性好,复杂度低的特点。
本发明提供的第一实施例是信号处理算法中的动态内存处理操作的方法,图1是本发明提出的实施方案流程框图,其中虚线框中的操作由算法代码完成,这里认为算法C代码以API的形式被外部主程序调用。(注:本发明的核心是一种实现机制,图中给出的框图只是起一个解释性的作用。本发明以Ogg Vorbis解码器在ARM平台上的移植为例)
首先统计出算法核心代码在执行过程中需要的堆,栈空间尺寸,主程序据此申请两块固定尺寸的内存空间,分别作为堆空间和栈空间,算法代码中的堆,栈空间均在这两块内存空间中分配得到。而后初始化堆,栈数据结构,记录这两块内存空间的首地址和尺寸。执行算法核心代码时,根据需求进行堆/栈空间的分配和栈空间的释放。分配其实是在堆空间或栈空间中划定一块空闲区域,指定某个数据项使用该块区域,也即指定数据项的存放空间的起始地址和终止地址。各数据项的终止地址即是下一个数据项的起始地址。释放即是通知程序其它数据项可以存放在这块内存空间中。通过内存空间使用量计数器监测内存空间供需关系,如出现堆空间不够用的情况,停止算法代码的执行,回到主程序并释放申请的两块内存空间,结束主程序的运行。如出现栈空间不够用的情况,释放所有分配的栈空间,终止算法代码的本次执行周期,启动新的执行周期。算法代码执行完毕后,由主程序释放申请的两块内存空间后,结束主程序的运行。方法流程如图1所示,包括:
步骤101:统计堆/栈空间需求。
本发明提出的方案符合TI XDAIS标准,即由主程序分配两块固定尺寸的内存空间,分别作为堆,栈空间,数字信号处理算法的核心实现代码中的内存空间都在这两块空间中分配得到,不直接从系统获取动态内存。因此需要统计核心实现代码的堆,栈空间需求量。
首先考察参考代码,区分数据内存分配应在两块内存空间中的哪块中进行。认为使用alloca()分配得到的内存应在栈空间中获得。对于使用malloc()和calloc()分配得到的内存,如果是算法的工作空间,在多个函数和处理模块中使用,且尺寸相对固定,则认为在堆空间获得。如果它们只是在某个函数的处理过程中申请的的临时空间,在这个函数退出时即行释放,认为此类临时内存空间应在栈空间中获得。这样划分堆,栈空间的目的是在核心实现代码的执行过程中,只进行栈空间的释放操作,不进行堆空间的释放操作,从而大幅降低内存操作函数的复杂度。
完成数据项分配空间的划分后,需要统计两块空间总的需求量。动态内存的分配具有尺寸随需而定的特点,核心实现代码的每次执行过程中需要的动态内存尺寸会不同。例如Ogg Vorbis解码器在解不同版本的编码器编出的码流时,需要的堆,栈空间尺寸相别很大。一种方法是考察算法的执行过程,确定某数据项可能的最大内存需求。以解码器中经常存在的内存分配操作为例:
/*memory allocation*/
int n=readbits(10);
int*p1=(int*)malloc(sizeof(int)*n);
上述伪码中,readbits(n)表示从码流中读取n bits的操作。
对于ARM系统,一个int型数据字长为4Bytes,则数据项p1的最大堆空间需求为4kBytes。
(注:如无特别说明,动态内存需求量均以Bytes为单位。)
依据这种方法统计得到的动态内存需求量是理论最大值,主程序据此进行动态内存申请,可以保证核心实现代码在任何执行过程中都不会出现内存空间不够用的情况,但是此时得到的动态内存需求量往往是GBytes级的,不可实现且没有必要。实用的方法是考察算法在若干次典型执行过程中的动态内存需求量,再加上一定的放大量。例如考察Ogg Vorbis解码器在解码若干较早版本编码器编出的高码率流时动态内存的需求量,记录下最大值HEAP_SIZE_MAX_R,STACK_SIZE_MAX_R,则实际的分配量为:
HEAP_SIZE_ALLOCATE=HEAP_SIZE_MAX_R·α  (1.a)
STACK_SIZE_ALLOCATE=STACK_SIZE_MAX_R·β(1.b)
其中,HEAP_SIZE_ALLOCATE和STACK_SIZE_ALLOCATE分别是主程序申请的两块作为堆,栈空间的尺寸。α,β为比例因子,取值应综合考虑系统的内存供需关系,典型值为1.2,即放大量为统计值的20%。这种方法可以保证绝大多数情况下核心实现代码能得到需要的动态内存,同时主程序可以严格控制动态内存的申请和释放,具有更高的可靠性和灵活性,算法核心代码的移植也与各平台的具体内存操作无关。
步骤102:主程序申请动态内存。
主程序调用相应的系统内存管理函数,申请两块尺寸分别为HEAP_SIZE_ALLOCATE和STACK_SIZE_ALLOCATE的内存空间HEAP_SPACE和STACK_SPACE。应确保内存空间申请成功并且首地址是4字节对齐的。如果失败,应停止主程序的运行。
步骤103:堆,栈空间信息结构体的定义和初始化。
堆,栈空间信息结构体用来记录与内存操作相关的信息,包括两块空间的首地址,当前可用空间的首地址和已占用内存空间的尺寸。栈空间信息结构体定义示例如下:
/*Stack struct definition sample*/
typedef struct_stack_buff{
  unsigned char     *stack_pointer_beg;
  unsigned char     *stack_pointer_curr;
  int StackSizeTot;
  int StackSizeUsed;
  int OverflowFlag;
}STACK_BUFF;
该结构体中各元素的意义如下:
stack_pointer_beg:栈空间的首地址。
stack_pointer_curr:数据项地址指针,指示可用空间的首地址,即前一个数据项内存空间的终止地址。
StackSizeTot:主程序申请的作为栈空间的内存块尺寸。
StackSizeUsed:已使用的栈空间尺寸。
OverflowFlag:栈空间溢出标志,该标志为1时,表明主程序申请的栈空间尺寸偏小,无法满足需求。
堆空间信息结构体的定义与此类似。注意信息结构体不要声明为静态全局变量,以符合TI XDAIS标准对于算法核心代码可重入性的要求。
栈空间信息结构体的初始化函数如下示例:
    /*STACK_BUFF Struct Initialization sample*/
    void  Stack_init(STACK_BUFF         *pStackBuf,unsigned  char*
pStackSpaceBegPointer,
    int STACK_SIZE_ALLOCATE)
    {
      pStackBuf->stack_pointer_curr=
      pStackBuf->stack_pointer_beg=pStackSpaceBegPointer;
      pStackBuf->StackSizeTot=STACK_SIZE_ALLOCATE;
      pStackBuf->StackSizeUsed=0;
      pStackBuf->OverflowFlag=0;
    }
函数参数:
pStackBuf:栈信息结构体指针。
pStackSpaceBegPointer:主程序申请的对应栈空间的内存块的首地址。
STACK_SIZE_ALLOCATE:主程序申请的对应栈空间的内存块的尺寸。
堆空间信息结构体的初始化函数与此类似。
步骤104:模拟堆,栈空间的分配。
这里并不进行真实意义上的从系统中申请一块空闲的内存空间,而是在主程序获得的内存块中指定一个数据项的起始和终止地址,并确保其它数据项不会再放入这段内存。
以下是栈空间的分配函数示例:
/*alloca simulation*/
void*ov_alloca(int size,STACK_BUFF*pStackBuf)
{
  unsigned char*tmp=pStackBuf->stack_pointer_curr;
  int size_needed=((size+3)>>2)<<2;
  if(size_needed<0‖pStackBuf->OverflowFlag)
      return NULL;
  pStackBuf->StackSizeUsed+=size_needed;
  if(pStackBuf->StackSizeUsed>pStackBuf->StackSizeTot)
  {
      pStackBuf->OverflowFlag=1;
      return NULL;
  }
  pStackBuf->stack_pointer_curr+=size_needed;
  return((void*)tmp);
}
函数参数:
size:当前数据项需要的栈空间尺寸。
pStackBuf:栈信息结构体指针。
以下简要说明:第一步,缓存栈空间可用空间首地址,如果可以进行分配,它即是分配给当前数据项的内存空间的首地址。第二步,按4字节对齐的原则重新统计当前数据项需要的栈空间尺寸。第三步,检查是否可以进行内存分配。第四步,更新已用栈空间尺寸计数器。第五步,检查是否溢出。第六步,前向移动可用空间首地址指针,表示一块尺寸为size_needed的栈空间分配给当前数据项,其它数据项应放置在其后的栈空间中。最后返回缓存的栈空间可用空间首地址。
步骤105:判断堆空间需求量是否过大。
如果堆空间需求量过大分配失败,则执行步骤106,停止核心实现代码的执行,进而执行主程序释放申请的内存空间步骤。否则执行步骤107。
步骤107:判断栈空间需求量是否过大。
如栈空间分配成功,执行步骤108该函数返回该段空间的首地址;如分配失败,执行步骤109,返回空指针,此时应该结束算法代码的本次执行,释放所有分配的栈空间,开始核心实现代码新的执行周期。通过检测OverflowFlag标志或者考察内存分配函数返回值,可以准确的判断内存空间分配是否失败。
步骤108:栈空间的释放,执行步骤110。
步骤109:释放所有栈空间启动核心实现代码新的执行周期,返回执行步骤104。
步骤110:判断核心实现代码是否结束执行。若是执行步骤111,否则返回执行步骤104。
本发明的一个实施原则是只进行栈空间的释放,不进行堆空间的释放,以减少内存操作的复杂度。
理想的栈空间释放位置在申请该栈空间的函数结束运行时。最简单的方法是后向回退数据项地址指针stack_pointer_curr和内存使用量计算器StackSizeUsed的值。本发明中采取恢复栈信息结构体数据的方法进行栈空间的释放,参考代码如下:
/*free stack buffer by restoring stack info struct*/
/*back stack struct*/
STACK_BUFF StackBufStructTmp=*pStackBuf;
/*allocate stack space*/
void*p1=ov_alloca(size,pStackBuf);
/*code using p1 here*/
/*restore stack struct*/
*pStackBuf=StackBufStructTmp;
/*following codes do not use p1*/
第一步,缓存栈信息结构体;第二步,进行栈空间内存申请。第三步,使用申请到的栈空间。第四步,恢复栈信息结构体。
显然,栈信息的缓存应在栈空间的申请之前,栈信息结构体的恢复在不再需要该栈空间中的数据之后。
栈空间的释放根据函数本身的执行过程和调用情况采用不同的实现方式。如果某个函数的退出接口是唯一的,则以上缓存和恢复代码应直接置于该函数内部即由申请和使用栈空间的函数自己负责释放栈空间,这样即使该函数在多处被调用,也不需增加额外的控制代码。如果某函数执行流程复杂,存在多个退出接口;且函数中只进行一次栈空间申请,或者虽进行多次栈空间申请,但没有提前释放某块栈空间,则在该函数被调用前缓存栈数据结构,调用结束后恢复栈数据结构即由调用该函数的函数负责释放栈空间,这种实现方法可以避免由于遗漏了某个退出接口的恢复代码而导致的内存泄漏。更复杂的情况则需要仔细考察函数的调用和退出情况,避免内存泄漏。
步骤111:主程序释放申请的内存空间。
算法执行完毕后,由主程序调用相应的系统内存管理函数释放申请的两块内存空间。
本发明提供的第二实施例是信号处理算法中的动态内存处理操作的装置,应用于嵌入式平台上,其结构如图2所示,包括:
申请模块201:用于数字信号处理算法的外部主程序申请两块固定位置和尺寸的内存空间作为堆空间和栈空间;
处理模块202:用于执行数字信号处理算法的核心实现代码时,在所述堆空间和栈空间内进行内存处理操作。
进一步所述处理模块202还包括处理子模块2021:用于在所述堆空间进行堆空间分配,在所述栈空间进行栈空间的分配和释放。
处理子模块2021包括:堆处理子模块20211:用于堆空间中存放的各种数据项占用固定尺寸,固定位置的内存空间;且
算法核心代码的执行过程中不对堆空间中的数据项进行释放和搬移操作。
处理子模块2021包括:栈处理子模块20212:用于核心实现代码通过控制数据项地址指针的移动和增减内存使用量计数器值模拟栈空间分配和释放,并通过内存使用量计数器进行内存使用量的监测。
该装置,还包括:
确定模块203:用于确定核心实现代码在执行过程中需要堆空间和栈空间大小;
分配模块204:用于外部主程序根据所确定的堆空间和栈空间大小进行内存空间申请。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (13)

1、一种数字信号处理算法中动态内存处理操作的方法,应用于嵌入式平台上,其特征在于,包括:
数字信号处理算法的外部主程序申请两块固定位置和尺寸的内存空间作为堆空间和栈空间;
执行数字信号处理算法的核心实现代码时,在所述堆空间和栈空间内进行内存处理操作。
2、如权利要求1所述的方法,其特征在于,所述进行内存处理操作具体为:在所述堆空间进行堆空间分配,在所述栈空间进行栈空间的分配和释放。
3、如权利要求2所述的方法,其特征在于,在所述堆空间进行堆空间分配具体为:堆空间中存放的各种数据项占用固定尺寸,固定位置的内存空间;且
算法核心代码的执行过程中不对堆空间中的数据项进行释放和搬移操作。
4、如权利要求2所述的方法,其特征在于,核心实现代码通过控制数据项地址指针的移动和增减内存使用量计数器值模拟栈空间分配和释放,并通过内存使用量计数器进行内存使用量的监测。
5、如权利要求4所述的方法,其特征在于,核心实现代码中申请栈空间的函数结束运行时,由所述申请栈空间的函数负责释放栈空间。
6、如权利要求4所述的方法,其特征在于,由申请和使用栈空间的函数的调用函数负责释放栈空间。
7、如权利要求1所述的方法,其特征在于,在数字信号处理算法的外部主程序分配固定位置和尺寸的堆空间和栈空间步骤前还包括:
确定核心实现代码在执行过程中需要堆空间和栈空间大小;
外部主程序根据所确定的堆空间和栈空间大小进行内存空间分配。
8、如权利要求7所述的方法,其特征在于,确定核心实现代码在执行过程中需要堆空间和栈空间大小具体为:
考察核心实现代码在典型执行过程中需要的堆空间和栈空间大小,再加上一定的放大量,最终确定核心实现代码在执行过程中需要堆空间和栈空间大小。
9、一种数字信号处理算法中动态内存处理操作的装置,应用于嵌入式平台上,其特征在于,包括:
申请模块:用于数字信号处理算法的外部主程序申请两块固定位置和尺寸的内存空间作为堆空间和栈空间;
处理模块:用于执行数字信号处理算法的核心实现代码时,在所述堆空间和栈空间内进行内存处理操作。
10、如权利要求9所述的装置,其特征在于,所述处理模块还包括处理子模块:用于在所述堆空间进行堆空间分配,在所述栈空间进行栈空间的分配和释放。
11、如权利要求10所述的装置,其特征在于,所述处理子模块包括:堆处理子模块:用于堆空间中存放的各种数据项占用固定尺寸,固定位置的内存空间;且
算法核心代码的执行过程中不对堆空间中的数据项进行释放和搬移操作。
12、如权利要求10所述的装置,其特征在于,所述处理子模块包括:栈处理子模块:用于核心实现代码通过控制数据项地址指针的移动和增减内存使用量计数器值模拟栈空间分配和释放,并通过内存使用量计数器进行内存使用量的监测。
13、如权利要求9所述的装置,其特征在于,还包括:
确定模块:用于确定核心实现代码在执行过程中需要堆空间和栈空间大小;
分配模块:用于外部主程序根据所确定的堆空间和栈空间大小进行内存空间申请。
CNA2008101048727A 2008-04-24 2008-04-24 信号处理算法中的动态内存处理操作的方法及装置 Pending CN101266540A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2008101048727A CN101266540A (zh) 2008-04-24 2008-04-24 信号处理算法中的动态内存处理操作的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2008101048727A CN101266540A (zh) 2008-04-24 2008-04-24 信号处理算法中的动态内存处理操作的方法及装置

Publications (1)

Publication Number Publication Date
CN101266540A true CN101266540A (zh) 2008-09-17

Family

ID=39988972

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2008101048727A Pending CN101266540A (zh) 2008-04-24 2008-04-24 信号处理算法中的动态内存处理操作的方法及装置

Country Status (1)

Country Link
CN (1) CN101266540A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103150257A (zh) * 2013-02-28 2013-06-12 天脉聚源(北京)传媒科技有限公司 一种内存管理方法和装置
CN103870244A (zh) * 2014-02-21 2014-06-18 北京神舟航天软件技术有限公司 一种sparc平台任务栈溢出检测算法
CN104703168A (zh) * 2013-12-10 2015-06-10 联芯科技有限公司 移动终端中关键代码的运行方法及运行系统
CN105116800A (zh) * 2015-08-11 2015-12-02 浙江中控技术股份有限公司 一种编译函数类型pou对象的方法
CN114840143A (zh) * 2022-05-09 2022-08-02 Oppo广东移动通信有限公司 基于栈空间特性缓存处理方法、装置、电子设备及存储介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103150257A (zh) * 2013-02-28 2013-06-12 天脉聚源(北京)传媒科技有限公司 一种内存管理方法和装置
CN104703168A (zh) * 2013-12-10 2015-06-10 联芯科技有限公司 移动终端中关键代码的运行方法及运行系统
CN103870244A (zh) * 2014-02-21 2014-06-18 北京神舟航天软件技术有限公司 一种sparc平台任务栈溢出检测算法
CN103870244B (zh) * 2014-02-21 2017-01-11 北京神舟航天软件技术有限公司 一种sparc平台任务栈溢出检测算法
CN105116800A (zh) * 2015-08-11 2015-12-02 浙江中控技术股份有限公司 一种编译函数类型pou对象的方法
CN105116800B (zh) * 2015-08-11 2018-04-20 浙江中控技术股份有限公司 一种编译函数类型pou对象的方法
CN114840143A (zh) * 2022-05-09 2022-08-02 Oppo广东移动通信有限公司 基于栈空间特性缓存处理方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN109582227B (zh) 固态硬盘写入方法、装置、计算机设备和存储介质
WO2009114985A1 (zh) 内存泄漏检测装置及方法
CN101971146B (zh) 改进作为管理程序来宾而运行的虚拟机中内存使用情况的系统和方法
CN106919454B (zh) 基于lte协议栈的内存池问题定位方法及其系统
US7434206B2 (en) Identifying memory leaks in computer systems
US20140380017A1 (en) Memory management and method for allocation using free-list
US8091080B2 (en) User process object code installer
CN101266540A (zh) 信号处理算法中的动态内存处理操作的方法及装置
CN1996258A (zh) 一种动态内存池的实现方法
CN101599046B (zh) 一种内存检测方法及装置
US10949342B2 (en) Persistent memory garbage collection
US9558055B2 (en) System level memory leak detection
US20070136546A1 (en) Use of Region-Oriented Memory Profiling to Detect Heap Fragmentation and Sparse Memory Utilization
US8108880B2 (en) Method and system for enabling state save and debug operations for co-routines in an event-driven environment
WO2006133418A2 (en) System and method for auditing memory
US8713538B2 (en) Monitoring heap in real-time by a mobile agent to assess performance of virtual machine
CN100389403C (zh) 内存泄漏检测及恢复的方法
CN104346286B (zh) 数据储存装置以及快闪存储器控制方法
CN100392606C (zh) 一种定位虚拟操作系统内存泄漏的方法
CN109753361A (zh) 一种内存管理方法、电子设备及存储装置
CN103309796A (zh) 一种组件对象模型对象的监控方法和装置
CN109918190A (zh) 一种数据采集方法及相关设备
CN101013378B (zh) 动态地迁移通道
CN105740170B (zh) 一种缓存脏页刷写方法及装置
JP2006350876A (ja) ヒープダンプ取得方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Open date: 20080917