问题标签 [stack-frame]

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 投票
3 回答
1115 浏览

objective-c - Objective-C 中的堆栈 - 框架 - 堆

我在这个网站上找到的所有问题都只涉及StackvsHeap并且不讨论Frame所以这是我的问题。不要理解这三个之间的区别。

我知道的:

Frame: Aframe就像是一个函数的实例变量的黑板。当函数运行时,所有实例变量都存储在该frame函数的内部。当一个函数被调用时,它 frame会在stack.

Stack: Astack可以可视化为 的物理stackframes当一个方法(或函数)被执行时,它会从stack.

Heap: 所有对象指针都存在于heap.

堆栈和框架很清楚(我认为),但我的Heap陈述是否正确?

0 投票
2 回答
533 浏览

c# - 我有时无法从 Silverlight 中的方法中获取方法名称

我有这种从 Silverlight 客户端记录错误的方法:

我的问题是,当我运行应用程序并调用一个引发异常的方法时,它会记录如下:

但是当具有正常(非开发人员运行时)的人运行此应用程序并引发异常时,它会记录如下:

我只是猜测这是由于 SDK Silverlight 运行时所致。很难说,因为我的大多数同事都安装了 Silverlight SDK...有人可以确认这是否是导致此异常的原因。

解决了!

这不是 SDK 运行时的原因,只是因为我调用了匿名方法。我在其中添加了这行代码:

我不担心这会占用多少资源,因为毕竟发生了异常,用户将停止他正在做的任何事情并联系支持。

0 投票
1 回答
942 浏览

assembly - 向程序集 x86 插入新指令时的堆栈帧大小?

如果我在堆栈帧中插入新的函数和指令来汇编 x86 代码,是否有必要增加堆栈大小?如果是的话是多少?

0 投票
1 回答
179 浏览

python - 何时在 python 中释放函数堆栈数据?

在测试以下代码时,我对此有疑问:

1、

2、

  1. 文件对象在file_close_test退出时关闭,因为没有引用它。
  2. 引发异常后,文件对象没有关闭。所以我认为相关的堆栈数据没有释放。
  3. exception_wrapper退出后,文件自动关闭。

你能为我解释一下吗?谢谢。

0 投票
2 回答
124 浏览

python - Python 类堆栈框架限制

如果我有以下格式的课程:

我可以调用该函数的次数是否有限制?例如:

getNewObject()我可以调用的返回值的次数是否有限制getNewObject()?如果是这样,哪些因素会影响这一点?

0 投票
1 回答
11274 浏览

assembly - 在这种情况下,OllyDbg 和 Assembler 中的 EBP+8 是什么意思?

我只是在 OllyDbg 中学习汇编和调试技能,以便学习如何使用未记录的函数。现在我遇到以下问题:

我有以下代码部分(来自 OllyDbg):

这是函数的开始,目标是找到数据结构。所以我发现它首先将 EBP 推入堆栈,然后将 ESP(当前堆栈指针)移动到 EBP,我认为它现在为函数定义了一个堆栈帧。现在教程说,在流行的布局中,第一个参数放在 [EBP+8] 处,第二个放在 [EBP+C] 处

这是我不明白的。我怎么知道第一个参数放在 EBP+8 ?

希望有人可以帮助我!谢谢!

0 投票
4 回答
11805 浏览

java - 如何扩展 Java 堆栈跟踪的大小以查看堆栈底部?(触发堆栈溢出)

在 Java 中,有没有办法查看完整的、未截断的堆栈跟踪(例如,通过增加记录的帧数),或者以其他方式到达堆栈跟踪的底部?通常堆栈跟踪在 1024 帧处从顶部截断,但对于堆栈溢出问题,这是毫无价值的,因为您确实需要查看是谁发出了触发递归的调用,在底部附近。在堆栈中间截断会更好,但显然 Sun 的 JVM 不够聪明,无法做到这一点。

也许甚至是一些特殊的太阳特定标志?我尝试将堆栈大小减小到允许的最小值(-Xss1000),但这仍然超过 1024 帧的价值。

就我而言,我正在尝试调试 Hadoop 映射器中发生的堆栈溢出,但前提是在非常大的输入上运行时。我认为问题出现是因为递归操作(Scala's foldRight)正在一个非常非常大的链表上完成,我需要以非递归方式重写它......但我需要知道是谁调用了foldRight. 这是一个在很多地方直接和间接调用的基本例程,并且我正在使用大量代码,所以这是非常不明显的。

0 投票
2 回答
710 浏览

c - 具有子作用域的函数的堆栈帧结构

以下是代码,我将其作为参考,以了解{}函数中存在的子作用域(或)虚拟作用域(just)如何影响堆栈帧的结构。

样本输出

基于上述行为,我推测如下。

  • 没有为范围创建堆栈帧{}
  • 通过这种方式auto,声明/定义的变量main和子范围内的变量{}共享相同的堆栈帧。
  • main因此,在函数内的任何地方(甚至在子范围内)都可以自由访问声明/定义的变量。
  • 另一方面,在子作用域中声明/定义的变量在块外失去了作用域。但只要堆栈帧存在,它的生命周期就有效。

问题:如果上述几点是正确的,那么为什么在给出同一个变量的多个定义时代码没有失败,一个是 within main,另一个是 within {}

0 投票
1 回答
8844 浏览

performance - 省略帧指针真的对性能有正面影响,对调试能力有负面影响吗?

正如很久以前所建议的那样,我总是在没有帧指针的情况下构建我的发布可执行文件(如果使用 /Ox 编译,这是默认设置)。

但是,现在我在论文http://research.microsoft.com/apps/pubs/default.aspx?id=81176中读到,帧指针对性能没有太大影响。因此,完全优化它(使用 /Ox)或使用帧指针完全优化它(使用 /Ox /Oy-)对性能并没有真正的影响。

微软似乎表示添加帧指针 (/Oy-) 会使调试更容易,但真的是这样吗?

我做了一些实验并注意到:

  • 在一个简单的 32 位测试可执行文件(使用 /Ox /Ob0 编译)中,省略帧指针确实提高了性能(大约 10%)。但是这个测试可执行文件只执行一些函数调用,没有别的。
  • 在我自己的应用程序中,添加/删除帧指针似乎没有很大的影响。添加帧指针似乎可以使应用程序快 5%,但这可能在误差范围内。

关于帧指针的一般建议是什么?

  • 是否应该在发布可执行文件中省略它们(/Ox),因为它们确实对性能有积极影响?
  • 是否应该在发布可执行文件中添加(/Ox /Oy-),因为它们提高了调试能力(使用故障转储文件进行调试时)?

使用 Visual Studio 2010。

0 投票
3 回答
498 浏览

c - 当 main() 调用 main() 时堆栈帧会发生什么

请考虑以下代码:

编译:

执行:

这里 main() 调用了它自己()。

似乎main()每次main()自己调用函数的原始堆栈帧都会被覆盖。

但是返回地址是什么?函数可以返回到自己的堆栈帧吗?

请帮我澄清这个疑问。

谢谢。