You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Armclang armlink --callgraph函数栈大小显示未知字节的场景咨询

可能导致Armclang armlink栈大小信息缺失的场景
  • 函数包含动态栈分配:如果函数里使用了alloca()或者C99变长数组(VLA),这类内存是运行时才确定分配大小的,armlink在链接阶段无法提前计算栈使用量,会直接标记为未知,也不会出现在--info=stack的输出中。

  • 函数仅通过函数指针被间接调用:如果某个函数没有直接的调用语句(比如作为回调函数、动态注册的处理逻辑),链接器的调用图分析无法追踪到它的调用路径,就会跳过对该函数的栈大小计算。

  • 函数被编译器优化移除:即便没有编译宏保护,静态函数若未被任何代码引用、C++模板函数未被实例化,或者在-O2/-O3等高优化级别下被完全内联,链接阶段就不会保留该函数的符号,自然不会生成栈大小信息。

  • 函数存在递归或循环调用依赖:直接递归调用的函数,或者存在A调用B、B又调用A的循环依赖调用链,链接器无法确定最大栈深度,会放弃计算栈大小,标记为未知。

  • 编译阶段未生成栈分析所需信息:如果编译时未添加-g(生成调试信息)或-fstack-usage(输出栈使用数据),链接器缺少足够的编译期栈使用细节,对复杂函数的栈大小分析会失效。

  • 手写汇编函数未标注栈大小:如果函数是手写汇编实现,且没有使用.stack伪指令明确声明栈大小,armlink无法自动分析汇编代码的栈使用情况,会显示栈大小未知。

内容的提问来源于stack exchange,提问作者arijit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:02:39