1

我是 C 和 Cyclone 的新手。我正在阅读 Michael Hicks 的论文Experience With Safe Manual Memory-Management in Cyclone

他们说:“我们使用过程内、流敏感、路径不敏感的分析来跟踪唯一指针何时被消耗,在这种情况下,分析会拒绝随后使用该指针的尝试。我们选择了过程内分析来确保模块化检查和路径- 不敏感分析以确保可伸缩性。为了使分析简单,唯一指针的副本(例如,在赋值或函数调用中)被视为消耗指针。

“消耗”指针是什么意思?这是一个标准术语吗?

4

3 回答 3

4

他们正在实现 C 的变体,其中某些指针是唯一的;也就是说,您不能同时拥有同一个指针的两个副本。因此,每当您复制指针(将其分配给另一个变量,将其传递给函数)时,新副本被认为是有效的,而旧副本被认为是无效的。他们称之为“消耗”指针。

在您引用的部分中,在原始论文中,希克斯将“消费”这个词用斜体表示,表明该用法是他定义含义的用法。“消费”指针的定义是跟踪指针何时被复制,并拒绝进一步使用它。

此用法基于以前的用法;例如,如果您查看列出的关于线性类型、别名类型和能力类型的先前工作的参考文献,您会发现它们使用了类似意义上的“消费”一词。来自Calculus of Capabilities 中的类型化内存管理:“在线性类型系统中,别名将受到微不足道的控制;对区域名称的任何使用都会消耗该名称,确保它不能在其他地方使用。” 因此,该术语基于现有用法,但确切的定义仍需在本文中阐明,因为希克斯将其应用于 C 变体中的指针,而不是类型化 lambda 演算中的名称。

于 2012-11-13T20:43:29.623 回答
1
e.g., in an assignment or function call

指针在作为参数分配或传递给函数时被消耗。

于 2012-11-13T20:42:02.910 回答
0

我认为关键是“后续”这个词,所以使用指针可能意味着任何尝试使用指针

于 2012-11-13T20:44:16.883 回答