函数调用栈帧回溯

函数调用栈帧回溯,第1张

本文以 Linux + arm64平台 上的测试程序为例,讲解函数调用的栈帧回溯基本原理。

相关的函数调用规范,可参考arm官方的 aapcs64文档

这里就以#12和#11栈帧为例

反汇编当前函数

先看栈帧保存 *** 作

目前获取的信息如下

最后函数退出前,会再恢复

反汇编当前函数

先看栈帧保存 *** 作

这里保存了fp/lr/x19三个寄存器值

最后函数退出前,会再恢复

前面三个64bit值分别保存的是

也就是,我们可以通过#11推导出#12. 以此类推,#12也可以推导出#13等。

不显式设置-Xss或-XX:ThreadStackSize时,在Linux x64上ThreadStackSize的默认值就是1024KB,给Java线程创建栈会用这个参数指定的大小。这是前一块代码的意思。

如果把-Xss或者-XX:ThreadStackSize设为0,就是使用“系统默认值”。而在Linux x64上HotSpot VM给Java栈定义的“系统默认”大小也是1MB。

所以这个条件下普通Java线程的默认栈大小怎样都是1MB。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8461996.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-16
下一篇2023-04-16

发表评论

登录后才能评论

评论列表(0条)

    保存