【问题标题】:what does it mean to consume a pointer?消耗指针是什么意思?
【发布时间】:2012-11-02 08:00:07
【问题描述】:

我是 C 和 Cyclone 的新手。我正在通过 Michael Hicks 的论文 Experience With Safe Manual Memory-Management in Cyclone 工作。

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

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

【问题讨论】:

  • 引用的最后一句说“唯一指针的副本(例如,在赋值或函数调用中)被视为消耗指针。”这不是你要问的吗?
  • @JamesMcNellis 所以这是他们在论文中定义的术语。这不是一个标准术语?
  • @akh2103 这不是 C 语言中的标准术语,它是线性类型和类似系统理论中的标准术语,它禁止别名(两个名称指代同一个对象),但鉴于正在引入与现有系统不同的新系统,本文提供了一个定义,说明它在这种特定情况下的含义。我还要指出,如果您是 C 新手,跳入一个 6 年未接触过的相当晦涩的基于研究的衍生产品可能不是最好的起点。
  • @BrianCampbell 我听到了!但我正在以神风敢死队的方式参加 PL 课程
  • @akh2103 啊,有道理。祝你好运!

标签: c terminology


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      e.g., in an assignment or function call
      

      当指针作为参数分配或传递给函数时,它会被消耗。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 2021-04-21
        • 2011-04-29
        • 1970-01-01
        • 2014-06-25
        • 2011-02-04
        相关资源
        最近更新 更多