【发布时间】:2018-03-27 10:48:46
【问题描述】:
我认为在 Common Lisp 的大多数实现中,cons 单元通常/总是堆分配(请参阅Why is consing in Lisp slow?)
Common Lisp 确实提供了从函数返回多个值的功能(在返回时使用values,在调用处使用multiple-value-bind)。我在这里推测了一下,但我认为这种构造的动机有两个方面:1)使truncate 之类的函数在您不关心丢弃值的典型情况下更易于使用;2)使可以在完全不使用堆分配数据结构的情况下返回多个值,并且(取决于实现(?))完全避免堆(以及以后的 GC 开销)。
Common Lisp(或者像 SBCL 这样的特定实现)是否让您能够使用堆栈分配的数据(可能与弱引用之类的东西结合使用)或创建复合/大型值类型(类似于 C 中的结构)?
【问题讨论】:
-
您可以使用
DYNAMIC-EXTENT声明进行堆栈分配。例如,参见 SBCL 手册 6.2 Dynamic-extent allocation。
标签: common-lisp stack-allocation