gpt4 book ai didi

assembly - 静态链接有什么用?

转载 作者:行者123 更新时间:2023-12-01 12:38:04 25 4
gpt4 key购买 nike

(在出现任何误解之前,我是 而不是 谈论图书馆的链接。)

在我的教科书(关于 MIPS 汇编)中,说明了以下内容:

Procedure/Function frame (aka activation record)

  • Used by some compilers to manage stack storage
  • In addition to Stack Pointer, use Frame Pointer register $fp to keep track of all pertinent information on the stack pertaining to a procedure/function invocation.

Caller side:

  • Caller pushes arguments on the stack (or passes them via $a0 - $a3 if not more than 4 arguments)
  • Caller reserves space on the stack for return values (or they are returned via $v0 - $v1)
  • Caller passes static link (address on the stack of the nearest occurrence of the next lexically enclosing procedure/function) via $v0

(goes on about callee side etc...)



我很难理解 MIPS 中的动态链接(帧指针等),因为
我不明白为什么需要那个。最终我 found out根本不需要它们,它只是在调试时派上用场。

我对这些静态链接的感觉很相似,有人可以向我解释它们的用途吗(最好是一个例子)?

最佳答案

在可以在函数内声明函数的语言中,需要静态链接、词法封闭作用域或静态父级。
例如,在下面的伪代码中

int foo(int s, int t) {
int x;
...
int bar(int a) {
return a + x;
}
}

bar ,变量 x相对于静态链接访问。

使用堆栈框架布局
------------------------
arg 1: s
arg 2: t
return address
local variable: x
...
-------------------------

假设全部为 32 位值,访问地址 xbar将是 static_link + 12

关于assembly - 静态链接有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27757271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com