问题标签 [activation-record]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
253 浏览

c++ - 在构建二进制文件的哪个阶段定义了激活记录?

是在预处理还是编译阶段,比如在 gcc 上?其他编译器有什么不同吗?

0 投票
2 回答
1964 浏览

c - 激活记录长度

前 3 个问题我分别得到 6,4,3,但我不知道如何弄清楚最后一个问题。但是,解决方案手册将 7、5、4、18 作为答案。

0 投票
2 回答
163 浏览

c - C - 激活记录中的变量地址

在激活记录中找到第一个局部变量的内存地址的最快、最简单的方法是什么?(在 C..)

不管我们已经声明了什么。可以简单为 char *s = 'Hello world!'

谢谢!

0 投票
1 回答
141 浏览

c++ - main() 是用自动变量创建的,如果是,它的目的是什么?

我在函数调用堆栈部分阅读了我的教科书并遇到了这个问题:

激活记录告诉main如何返回操作系统(即转移到返回地址R1)并包含main的自动变量(即a,它被初始化为10)的空间

这对我来说是个新闻,所以我的问题是:

  1. 是否创建了自动变量?
  2. 它的目的是什么?
  3. 它的价值总是一样的吗?

提前致谢

0 投票
4 回答
2840 浏览

c - main 在 C 中是否有返回地址、动态链接或返回值?

根据我们的书,每个函数在 C 的运行时堆栈中都有一个激活记录。每个激活记录都有一个返回地址、动态链接和返回值。主要也有这些吗?

0 投票
4 回答
265 浏览

c - 在另一个函数中使用的一个函数的局部变量的值(c 编程)

我确信上面的程序将输出作为一些垃圾值(这就是我编译和运行时发生的事情)。但是我在一篇文章中读到,某些编译器可以将输出本身设为 4。给出的解释是它与激活堆栈和激活帧有关。我不明白。是否类似于 bar() 函数中的 int a=4 的值存储在激活堆栈中的某个位置以供将来使用?我很困惑!

0 投票
1 回答
40 浏览

c++ - 激活记录是否用于查找错误行?

所以我最近遇到了激活记录这个术语,并对它的工作原理和用途非常感兴趣。

我的问题是这可以深入到什么程度?我知道这是一个堆栈框架,并且记录会随着范围的变化而变化,但是程序员可以实现多远呢?

这是大多数 IDE 用来确定错误在哪一行的方法吗?

AR中究竟“记录”了什么?

0 投票
1 回答
359 浏览

c++ - 通过信号和返回地址改变程序执行流程

我试图通过更改此代码中函数的返回地址来更改程序执行流程:

为此,我调用f函数。所以它卡在while(true). 然后我使用命令SIGCONT向程序发送信号。kill -SIGCONT <PID>现在程序必须中断执行while(true)f执行s函数。在s函数中,我定义了在运行时堆栈中b查找函数的返回地址,即. 我尝试更改此值,以便当它返回时,跳过执行并执行。但它一直卡在我不知道如何使这项工作。s*(&b+3)*(&b+3) = *(&b+3) + 4fwhile(true)printf("f exit\n")while

注意:我通过将 *(&b+3) 与之前 __builtin_return_address(0) 返回的值进行比较来验证它是返回地址。

函数体main必须f保持不变。

谢谢。

0 投票
1 回答
1194 浏览

c++ - 激活记录

我很难理解激活记录(我已经阅读了多个关于它的答案)。

假设我们有一个代码

当程序开始执行时,堆栈将被填满,例如

激活记录会将静态局部变量、函数地址、函数参数和返回值放在它的堆栈上,我应该理解为在激活记录(或被调用函数)执行完成后,激活记录被其返回值替换吗?它的堆栈被释放了吗?

同样的函数被多次调用,并且调用堆栈应该保存返回数据的位置,是相同的activation_record被推入堆栈还是在每次调用函数时创建?综上所述,是否可以在编译期间将激活记录推送到堆栈上?

感谢您的回答

0 投票
0 回答
288 浏览

swift - 在运行时堆栈上转义闭包?

Swift 的闭包是如何在运行时栈上实现的?我想非转义闭包只是通过额外的访问链接发送到它所包含的堆栈帧,但是转义闭包如何工作?其随附的激活记录保存在哪里?