在程序设计语言理论中,
与堆栈帧相关的块有两种。内联块和功能块。
内联阻止和功能块有什么不同?
并假设有如下代码。
int x = 1;
g(z) = z + x;
根据内联块,函数g是否嵌套到变量x?
答案 0 :(得分:1)
功能块:
void func(){...}; //在c或c ++中
(defun func ...)// in clisp
fun func()= ... // in ml
功能块是包装功能的块 在C中,当函数返回时,函数的激活记录将从堆栈中删除 但是,在像ML,CLISP这样的函数式语言中,函数的返回并不总是意味着删除堆栈帧 因为该功能可以在以后使用。
内嵌块是显示嵌套结构的块。
int x = 1;
g(z) = z + x;
当函数g使用In-line块时,函数g将变量x取为1.函数g不知道x的值只有函数g的激活记录。但是函数g可以知道x的值的原因是它使用静态链接,静态链接指向最接近的嵌套块。
功能块和内联块之间的区别在于,当函数返回时,不会从堆栈帧中删除功能块。