[发明专利]一种静态存储分配的局部非静态数据的存储空间分配方法有效
申请号: | 201010546810.9 | 申请日: | 2010-11-16 |
公开(公告)号: | CN102467452A | 公开(公告)日: | 2012-05-23 |
发明(设计)人: | 于忠华;何燕;赵敬超 | 申请(专利权)人: | 北京中电华大电子设计有限责任公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100102 北京市朝阳*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 静态 存储 分配 局部 数据 存储空间 方法 | ||
技术领域
本发明涉及编译器领域中静态存储分配中对于局部非静态数据进行存储空间分配的一种分配方法。
背景技术
在编译开发工具中,一个重要的处理步骤就是数据存储空间的分配。对于编译系统一般有静态存储分配、栈式存储分配和堆式存储分配三种分配方式。
静态存储分配方法是在程序生命周期中,数据对象的数据存储空间被分配到固定的位置,这种分配方法需要数据对象的数量和大小在编译时刻已知。
栈式存储分配方法是在栈上为数据对象分配数据空间,对于数据的使用通过起始地址加偏移来实现,这样就可以在程序运行期间根据需要为数据对象分配相应的数据空间。栈式存储分配使得递归和动态数组成为可能。
堆式存储方法是最灵活最昂贵的存储分配方法,数据对象可以在任何时刻,以任意次序分配和释放。它允许程序在一个称为存储池的堆中分配空间,堆分配既可以由编程者自己控制,也可以由编译系统或者加载器进行运行时控制,这给编程者使用数据存储空间带来了极大的灵活性。
早期的编译系统,一般都采用静态存储分配方法,目前的大部分编译系统,除了全局变量和局部静态变量外,一般不再采用静态数据存储空间分配方法进行数据空间分配,但是对于某些嵌入式芯片,由于其功能的限制,其编译系统中对于所有的数据空间仍采用了静态存储分配方法。
发明内容
目前已有的静态存储分配方法中,对于局部非静态数据的分配,是以函数为单位来进行分配操作。本发明的目的在于实现一种以函数调用关系链为组织形式的更有效、更快速的局部非静态数据的存储空间分配方法。
本发明的目的通过以下技术实现,步骤如下(见图1):
1.读入中间目标代码文件中的函数信息,建立函数链表,在函数链表的节点中存储函数的所有信息;
2.建立可分配数据空间链表:根据配置文件或输入参数中设置的可分配的数据空间信息,使用内存节点结构体记录每一块可被分配的数据存储空间,并将其放在可分配数据空间链表中。
3.建立函数调用关系链(图2):
(1)遍历函数链表,分析每个函数的函数体代码,将其调用的函数名称用链表(或集合)记录下来形成被调用函数记录;
(2)遍历函数链表,根据上面步骤(1)形成的记录,找出没有被任何函数调用过的函数(即没有出现在上面步骤中形成的记录中的函数),将其作为每个函数调用关系链表的根函数,将其指针放入根函数链表的节点中,并给予一个数字编号;
(3)从每个根函数开始,采用广度优先搜索建立每个函数与其调用的函数间的连接,形成函数调用关系链,即通过查询函数链表,将被调用函数的指针或位置信息填入调用函数的结构体中(重复调用只记录一次),并通过在被调用函数中记录函数调用关系链的根函数的编号,来确定该函数是否被多个函数调用关系链调用,每次被调用函数中记录的当前根函数的编号转换时,其内部记录的调用其的函数调用关系链的个数增加1,函数的调用关系链个数的初始值为0。
4.为被多个函数调用关系链调用的函数的局部非静态数据分配数据存储空间:
(1)遍历函数链表,如果函数记录的调用关系链的个数大于1,执行下面的步骤(2)-(4);
(2)从可分配数据存储空间链表中找得合适的存储块进行相应的分配;
(3)将分配的数据存储空间从可分配数据存储空间链表中去除;
(4)并将相关的分配信息记录入永久分配数据存储空间链表中。
5.为每个函数调用关系链的函数的局部非静态数据分配可被覆盖数据存储空间,从每个函数调用关系链的根函数开始,执行下列步骤(图3):
(1)若当前函数的局部非静态数据已经分配数据存储空间,则返回;
(2)将当前可分配数据存储空间链表生成一副本,在副本中按照下面的步骤为函数的局部非静态数据分配数据存储空间;
(3)从当前函数调用关系链的已分配数据存储空间链表中查找是否有被当前函数直接或间接调用的函数的分配数据存储空间的信息(该调用关系可以通过步骤3中生成的信息中获得),如果有,则将其与当前可分配数据存储空间副本中重合的部分填入一个新建的临时不可覆盖数据存储空间链表中;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京中电华大电子设计有限责任公司,未经北京中电华大电子设计有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010546810.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于造纸的方法和设备
- 下一篇:一种ATP再生系统及其应用