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

Clang编译ARM代码严重Bug:__packed指针未生成非对齐访问代码

NDK 16(Clang 5.0.3)编译ARM-v7a代码时__packed指针的对齐Bug问题

最近在使用NDK 16(基于Clang 5.0.3)编译ARM-v7a架构的Android代码时,碰到了一个和指针对齐、__packed属性相关的棘手问题,具体现象如下:

  • 当函数参数为uint8_t*时,生成的汇编会调用__aeabi_memcpy,支持任意地址的指针,运行完全正常;
  • 当参数改为uint32_t*时,汇编会使用ldm.w/stm.w指令做优化,这类指令仅支持对齐地址,传入奇数地址的指针会触发SIGBUS信号,这属于符合设计预期的行为;
  • 但当参数为__packed uint32_t*时,生成的汇编代码和未加__packed属性时完全一致,没有遵循ARM标准生成非对齐访问的代码,传入奇数地址的指针仍然会触发SIGBUS信号,这明显不符合__packed属性的定义。

目前我采用的临时解决方案是始终使用uint8_t*作为输入参数来规避这个问题,但更希望能修复这个Bug,这样既能保证代码在非对齐场景下的正确性,又能兼顾对齐场景下的访问效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:39:20