内存分配和方案中的调用堆栈

时间:2015-12-09 02:22:39

标签: memory-management scheme callstack

当计算机运行Scheme代码时,它如何设置和使用堆栈框架?此外,Scheme如何进行内存管理?

例如,如果我在方案

中运行以下代码
(define add_func x
    (lambda (y) (+ x y))

(map (add_func 2) (cdr (list 1 2 3)))

然后add_func返回的函数存储在内存中。 add_func是否存储在堆栈中?另外,(list 1 2 3)是否存储在与(cdr(list 1 2 3))相同的堆栈帧中? every()是否表示新的堆栈帧?

1 个答案:

答案 0 :(得分:2)

Scheme未指定特定的内存管理策略或布局。特别是,可以实现Scheme在堆上分配所有调用帧而不使用调用堆栈。实际上,将堆用于调用框架可以更容易地实现延续。

您的add_func(以下我称之为add-func与传统的方案命名风格一致)未正确定义。我认为你的意思是:

(define (add-func x)
  (lambda (y) (+ x y)))

尽管Scheme没有指定内存中存储内容的方式,但add-func返回的过程很可能存储在堆中,而不与任何特定的调用帧相关联。