Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp 显式堆栈分配的数据_Common Lisp_Stack Allocation - Fatal编程技术网

Common lisp 显式堆栈分配的数据

Common lisp 显式堆栈分配的数据,common-lisp,stack-allocation,Common Lisp,Stack Allocation,我认为在大多数常见Lisp cons的实现中,单元格通常/始终是堆分配的(请参阅) Common Lisp确实提供了从函数返回多个值的功能(在返回时使用值,在调用站点使用多值绑定)。我在这里进行了一些推测,但我认为这种构造的动机有两个方面:1)使truncate等函数在不关心被丢弃的值的典型情况下更易于使用;2)使返回多个值成为可能,而根本不使用堆分配的数据结构;以及(取决于实现(?)完全避免堆(以及以后的GC开销) Common Lisp(或像SBCL这样的特定实现)是否能让您使用堆栈分配的数

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

Common Lisp确实提供了从函数返回多个值的功能(在返回时使用
,在调用站点使用
多值绑定
)。我在这里进行了一些推测,但我认为这种构造的动机有两个方面:1)使
truncate
等函数在不关心被丢弃的值的典型情况下更易于使用;2)使返回多个值成为可能,而根本不使用堆分配的数据结构;以及(取决于实现(?)完全避免堆(以及以后的GC开销)

Common Lisp(或像SBCL这样的特定实现)是否能让您使用堆栈分配的数据(可能与弱引用之类的东西结合使用)或创建复合/大ish值类型(类似于C中的结构)?

Common Lisp有一个声明。实现可以使用此信息来堆栈分配一些数据结构-它们也可以忽略此声明

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

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


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

您可以使用
DYNAMIC-EXTENT
声明进行堆栈分配。例如,请参阅SBCL手册。请参阅。