低级别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;
超级会员免费看
订阅专栏 解锁全文
962

被折叠的 条评论
为什么被折叠?



