当计算机运行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()是否表示新的堆栈帧?
答案 0 :(得分:2)
Scheme未指定特定的内存管理策略或布局。特别是,可以实现Scheme在堆上分配所有调用帧而不使用调用堆栈。实际上,将堆用于调用框架可以更容易地实现延续。
您的add_func
(以下我称之为add-func
与传统的方案命名风格一致)未正确定义。我认为你的意思是:
(define (add-func x)
(lambda (y) (+ x y)))
尽管Scheme没有指定内存中存储内容的方式,但add-func
返回的过程很可能存储在堆中,而不与任何特定的调用帧相关联。