29、低级别C语言重叠结构的形状分析

低级别C语言重叠结构的形状分析

1. 引言

堆操作程序的形状分析是一个非常活跃的研究领域,但大多数工作的重点都放在了类似Java的数据结构上,在这类结构中,指针的操作和计算不像在低级C语言中那样频繁。虽然最近已经设计出了从广义上处理指针算术的形状分析方法,但我们要解决一个相关且特别困难的问题:重叠结构。

重叠结构这一术语是在之前的研究中提出的,其形状分析被列为一个开放问题。这种重叠在设备驱动程序中很常见,数据会通过将列表或树相关的记录嵌入到包含实际数据的记录中,同时保存在多个数据结构中。

例如,在Linux内核的代码中,一个节点记录可能包含数据以及两个与列表相关的组件。第一个是 hlist_node ,它将 hlist 的前后指针嵌入到节点中;第二个是 list_head ,它既作为列表头,又将标准的循环双向链表嵌入到节点中。

struct hlist_head { struct hlist_node *first; };
struct hlist_node { struct hlist_node *next, **pprev; };
struct list_head { struct list_head *next, *prev; };
struct node { int data; struct hlist_node list; struct list_head queue; };
struct hlist_head ht[512];
struct mutex hlock;
struct list_head cq;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值