代码之家  ›  专栏  ›  技术社区  ›  Greg Nisbet

显式堆栈分配的数据

  •  3
  • Greg Nisbet  · 技术社区  · 8 年前

    我认为在大多数常见Lisp cons实现中,单元格通常/始终是堆分配的(请参见 Why is consing in Lisp slow? )

    Common Lisp确实提供了从函数返回多个值的工具(使用 values 返回时和 multiple-value-bind 在呼叫现场)。我在这里有一点猜测,但我认为这种构造的动机有两个方面:1)生成如下函数 truncate 在不关心被丢弃的值的典型情况下更容易使用,并且2)可以在根本不使用堆分配的数据结构的情况下返回多个值,并且(取决于实现(?)完全避免堆(以及稍后的GC开销)。

    公共Lisp(或SBCL之类的特定实现)是否能够使用堆栈分配的数据(可能与弱引用等结合使用)或创建复合/大ish值类型(类似C中的结构)?

    1 回复  |  直到 8 年前
        1
  •  6
  •   Rainer Joswig mmmmmm    8 年前

    公共Lisp有一个 DYNAMIC-EXTENT 公告实现可以使用这些信息来堆叠和分配一些数据结构——它们也可以忽略这个声明。

    请参阅一些实现如何支持它的相应文档:

    其他实现也支持它,但可能缺乏关于它的明确文档。

    明确支持回归的主要动机 多个值 是为了摆脱对返回值列表的考虑/分解,甚至将一些结果放入全局变量。因此,现在可以在寄存器中或通过堆栈返回多个值。

    推荐文章