问题标签 [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.
c++ - 在构建二进制文件的哪个阶段定义了激活记录?
是在预处理还是编译阶段,比如在 gcc 上?其他编译器有什么不同吗?
c - 激活记录长度
前 3 个问题我分别得到 6,4,3,但我不知道如何弄清楚最后一个问题。但是,解决方案手册将 7、5、4、18 作为答案。
c - C - 激活记录中的变量地址
在激活记录中找到第一个局部变量的内存地址的最快、最简单的方法是什么?(在 C..)
不管我们已经声明了什么。可以简单为 char *s = 'Hello world!'
谢谢!
c++ - main() 是用自动变量创建的,如果是,它的目的是什么?
我在函数调用堆栈部分阅读了我的教科书并遇到了这个问题:
激活记录告诉main如何返回操作系统(即转移到返回地址R1)并包含main的自动变量(即a,它被初始化为10)的空间
这对我来说是个新闻,所以我的问题是:
- 是否创建了自动变量?
- 它的目的是什么?
- 它的价值总是一样的吗?
提前致谢
c - main 在 C 中是否有返回地址、动态链接或返回值?
根据我们的书,每个函数在 C 的运行时堆栈中都有一个激活记录。每个激活记录都有一个返回地址、动态链接和返回值。主要也有这些吗?
c - 在另一个函数中使用的一个函数的局部变量的值(c 编程)
我确信上面的程序将输出作为一些垃圾值(这就是我编译和运行时发生的事情)。但是我在一篇文章中读到,某些编译器可以将输出本身设为 4。给出的解释是它与激活堆栈和激活帧有关。我不明白。是否类似于 bar() 函数中的 int a=4 的值存储在激活堆栈中的某个位置以供将来使用?我很困惑!
c++ - 激活记录是否用于查找错误行?
所以我最近遇到了激活记录这个术语,并对它的工作原理和用途非常感兴趣。
我的问题是这可以深入到什么程度?我知道这是一个堆栈框架,并且记录会随着范围的变化而变化,但是程序员可以实现多远呢?
这是大多数 IDE 用来确定错误在哪一行的方法吗?
AR中究竟“记录”了什么?
c++ - 通过信号和返回地址改变程序执行流程
我试图通过更改此代码中函数的返回地址来更改程序执行流程:
为此,我调用f
函数。所以它卡在while(true)
. 然后我使用命令SIGCONT
向程序发送信号。kill -SIGCONT <PID>
现在程序必须中断执行while(true)
并f
执行s
函数。在s
函数中,我定义了在运行时堆栈中b
查找函数的返回地址,即. 我尝试更改此值,以便当它返回时,跳过执行并执行。但它一直卡在我不知道如何使这项工作。s
*(&b+3)
*(&b+3) = *(&b+3) + 4
f
while(true)
printf("f exit\n")
while
注意:我通过将 *(&b+3) 与之前 __builtin_return_address(0) 返回的值进行比较来验证它是返回地址。
函数体main
必须f
保持不变。
谢谢。
c++ - 激活记录
我很难理解激活记录(我已经阅读了多个关于它的答案)。
假设我们有一个代码
当程序开始执行时,堆栈将被填满,例如
激活记录会将静态局部变量、函数地址、函数参数和返回值放在它的堆栈上,我应该理解为在激活记录(或被调用函数)执行完成后,激活记录被其返回值替换吗?它的堆栈被释放了吗?
同样的函数被多次调用,并且调用堆栈应该保存返回数据的位置,是相同的activation_record被推入堆栈还是在每次调用函数时创建?综上所述,是否可以在编译期间将激活记录推送到堆栈上?
感谢您的回答
swift - 在运行时堆栈上转义闭包?
Swift 的闭包是如何在运行时栈上实现的?我想非转义闭包只是通过额外的访问链接发送到它所包含的堆栈帧,但是转义闭包如何工作?其随附的激活记录保存在哪里?