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

ARM64汇编中如何将内存空间大小设为C文件定义的外部变量值?

结论

直接使用.space伪指令无法实现这个需求。
.space是汇编期处理的伪指令,它的长度参数必须是汇编阶段就能确定的常量,而你通过.extern声明的length是定义在C文件中的变量,它的数值要到链接阶段甚至运行阶段才能确定,汇编器处理.space时无法获取这个变量的值,自然不能用来设置内存块长度。

可行替代方案
  • 如果你可以接受length为编译期固定值:
    你可以把C文件中length的定义改为编译期宏,比如#define LENGTH 0x2000,编译汇编文件时通过gcc的-DLENGTH=0x2000参数把常量值传递给汇编器,直接把汇编代码改成.space LENGTH即可,这种场景不需要再用.extern声明length。
  • 如果你需要length是运行时可修改的变量:
    静态分配固定大小内存的思路本身不适用,建议改为运行时动态分配:可以在C代码中调用malloc(length)分配对应大小的内存,把内存起始地址传递给汇编代码使用;也可以直接在汇编代码中调用malloc,传入length的值申请内存。
  • 如果你只需要在链接阶段确定内存大小:
    你可以把length改为链接脚本中定义的导出符号,在汇编中预留内存位置,由链接器最终填充长度值,这种场景下length不能作为普通C变量使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:54:05