我是C和Cyclone的新手。我正在通过迈克尔希克斯的论文Experience With Safe Manual Memory-Management in Cyclone工作。
他们说:“我们使用过程内,流动敏感,路径敏感的分析来追踪一个独特的指针 变为消耗,在这种情况下,分析拒绝后续尝试使用指针。我们 选择过程内分析以确保模块化检查和路径不敏感分析以确保 可扩展性。保持分析简单,副本 唯一指针(例如,在赋值或函数中) call)被视为消耗指针。“
“消耗”指针是什么意思?这是一个标准术语吗?
答案 0 :(得分:4)
他们正在实现C的变体,其中某些指针是唯一的;也就是说,您不能同时拥有同一指针的两个副本。因此,无论何时复制指针(将其指定给另一个变量,将其传递给函数),新副本都被视为有效,旧副本被视为无效。他们称之为“消耗”指针。
在你引用的部分中,在原始论文中,希克斯将这个词“消费”用斜体,表明该用法是他定义意义的用法。 “消耗”指针的定义是在复制指针时跟踪,并拒绝进一步使用它。
此用法基于以前的用法;例如,如果您检查列出的先前对线性类型,别名类型和功能类型的参考,您会发现它们使用类似意义上的“消耗”一词。来自Typed Memory Management in a Calculus of Capabilities:“在线性类型系统中,别名将被轻易控制;任何区域名称的使用都将使用该名称,确保它不能在其他地方使用。”所以这个术语是基于现有的用法,但是本文中仍然需要明确定义,因为Hicks将其应用于C变量中的指针,而不是类型化lambda演算中的名称。
答案 1 :(得分:1)
e.g., in an assignment or function call
指针在作为参数传递给函数时被消耗。
答案 2 :(得分:0)
我认为关键是“后续”这个词,所以使用指针可能意味着任何使用指针的尝试