发明名称 | 在运行时对堆数据进行池分配的方法 | ||
摘要 | 本发明提供一种在运行时对堆数据进行池分配的方法,包括接收堆数据的内存池分配请求;考察调用点上下文,将包含在包装函数中的所述调用点的地址和调用最上层包装函数的调用点的地址加入变长调用链;为从所述变长调用链所分配的堆数据对象选择内存池;从所述内存池中为所述堆数据分配空间。本发明能够解决关系不紧密的堆数据对象因为在同一个调用点分配而从同一个内存池分配的问题以及关系紧密的堆数据对象因为在不同的调用点分配而从不同的内存池分配的问题,提高了池分配的效果。 | ||
申请公布号 | CN101763308B | 申请公布日期 | 2012.02.22 |
申请号 | CN200910243917.3 | 申请日期 | 2009.12.25 |
申请人 | 中国科学院计算技术研究所 | 发明人 | 王振江;武成岗 |
分类号 | G06F12/02(2006.01)I | 主分类号 | G06F12/02(2006.01)I |
代理机构 | 北京泛华伟业知识产权代理有限公司 11280 | 代理人 | 王勇 |
主权项 | 一种在运行时对堆数据进行池分配的方法,包括:步骤1)、接收堆数据的内存池分配请求;步骤2)、考察调用点上下文,将包含在包装函数中的所述调用点的地址和调用最上层包装函数的调用点的地址加入变长调用链;步骤3)、分析从变长调用链所分配的堆数据对象的指针信息,对于从该变长调用链所分配的堆数据对象A和从另一变长调用链所分配的堆数据对象B具有相同的类型,并且所述A的指针保存在所述B的某个域中的情况,以及从该变长调用链所分配的堆数据对象A的指针记录在一组对象C的某个域里,而从另一变长调用链所分配的堆数据对象B的指针也保存在这组对象C的同一个域里,并且所述A和B的类型相同的情况,所述A和B具有紧密关系,为所述A和B分配同一个内存池,为不具有紧密关系的堆数据对象分配不同的内存池;步骤4)、从所述内存池中为所述堆数据分配空间。 | ||
地址 | 100190 北京市海淀区中关村科学院南路6号 |