具有重叠结构的低级 C 语言形状分析
1. 引言
堆操作程序的形状分析是一个非常活跃的研究领域,但大多数工作的重点都集中在类似 Java 的数据结构上,在这类数据结构中,指针的操作和计算不像在低级 C 语言中那样频繁。虽然最近已经设计出了从广义上处理指针算术的形状分析方法,但我们要解决一个相关且特别困难的问题:重叠结构。这个术语在之前的研究中被提出,当时对这类结构的形状分析被列为一个开放问题。
重叠结构在设备驱动程序中很常见,在这些程序中,数据会同时保存在多个数据结构中,方法是将与列表或树相关的记录嵌入到包含实际数据的记录中。例如,在 Linux 内核的代码里,一个节点记录可能包含数据以及两个与列表相关的组件。第一个是 hlist_node ,它将 hlist 的前后指针嵌入到节点中;第二个是 list_head ,它既作为列表头,又将标准的循环双向链表嵌入到节点中。
hlist (或 pprev 列表)本身是一种比较复杂的数据结构。为了节省内存并高效实现插入和删除操作,Linux 开发者使用这种双向链表,它的指针指向的是前一个元素的下一个组件,而不是元素本身。 hlist 常用于哈希表中,因为列表头只需要一个指针可以显著节省空间。
下面是一个示例代码,展示了重叠数据结构的使用:
struct hlist_head { struct hlist_node *first; };
struct hlist_node
超级会员免费看
订阅专栏 解锁全文
1262

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



