Common lisp 显式堆栈分配的数据
我认为在大多数常见Lisp cons的实现中,单元格通常/始终是堆分配的(请参阅) Common Lisp确实提供了从函数返回多个值的功能(在返回时使用Common lisp 显式堆栈分配的数据,common-lisp,stack-allocation,Common Lisp,Stack Allocation,我认为在大多数常见Lisp cons的实现中,单元格通常/始终是堆分配的(请参阅) Common Lisp确实提供了从函数返回多个值的功能(在返回时使用值,在调用站点使用多值绑定)。我在这里进行了一些推测,但我认为这种构造的动机有两个方面:1)使truncate等函数在不关心被丢弃的值的典型情况下更易于使用;2)使返回多个值成为可能,而根本不使用堆分配的数据结构;以及(取决于实现(?)完全避免堆(以及以后的GC开销) Common Lisp(或像SBCL这样的特定实现)是否能让您使用堆栈分配的数
值
,在调用站点使用多值绑定
)。我在这里进行了一些推测,但我认为这种构造的动机有两个方面:1)使truncate
等函数在不关心被丢弃的值的典型情况下更易于使用;2)使返回多个值成为可能,而根本不使用堆分配的数据结构;以及(取决于实现(?)完全避免堆(以及以后的GC开销)
Common Lisp(或像SBCL这样的特定实现)是否能让您使用堆栈分配的数据(可能与弱引用之类的东西结合使用)或创建复合/大ish值类型(类似于C中的结构)?Common Lisp有一个声明。实现可以使用此信息来堆栈分配一些数据结构-它们也可以忽略此声明
请参阅一些实现如何支持它的相关文档:
显式支持返回多个值的主要动机是避免考虑/分解返回值列表,甚至将一些结果放入全局变量中。因此,现在可以在寄存器中或通过堆栈返回多个值。您可以使用
DYNAMIC-EXTENT
声明进行堆栈分配。例如,请参阅SBCL手册。请参阅。