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

GCC C++17中inline变量结合section属性的内存定位异常问题

问题:inline变量搭配section属性导致内存段放置异常

背景

在C语言环境下,我曾在头文件my_file.h中使用如下宏定义处理变量声明:

#ifdef my_fileC
#  define extint
#else
#  define extint extern
#endif

之后通过extint int32_t my_var;的方式声明变量,以此在不同编译单元中控制变量的定义/外部引用状态。

切换到C17后,我弃用了上述extint宏,改用C17原生支持的inline int32_t my_var;声明变量,正常场景下程序运行无问题。

异常情况

当我为需要放置到预定义内存区域的变量添加section属性时,问题出现:使用inline int32_t my_var __attribute__ ((section("my_section")));声明后,只有一个变量被正确放置到目标段,其余变量的内存位置均错误。程序编译、链接无报错,但运行到特定逻辑节点时崩溃——除了用inline替换extint外,源码无其他改动。

环境信息

  • 开发环境:STM32 Cube IDE,搭载GNU工具链10.3-2021.10
  • 目标芯片:STM32H7

相关链接脚本片段

my_data_section (NOLOAD) :  /* (NOLOAD) forces not to create init data in hex file */
  {
    . = ALIGN(4);    
    *(my_section)  
    . = ALIGN(4);    
  } >RAM_D2

请问是否有人遇到过类似问题?这是编译器/链接器的bug,还是我的用法有误?我的项目规模较大,无法简化为最小复现案例,但可以提供两种写法对应的map文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:18:17