panyan120 2021-07-20 17:25 采纳率: 0%
浏览 644

C语言编译时,全局变量的地址是在什么阶段分配的?

总结一句话:C语言编译时,全局变量的存储地址时什么时候,由谁确定的?
具体问题:
使用IAR集成开发环境发现一个不理解的问题: IAR中有个链接文件Linker configuration file,其内容是定义所用MCU的FLASH,RAM等地址空间,并将其分配为项目需要的堆/栈/静态存储区等等空间。 因为名字是“链接文件”,所以我认为其是在“链接”阶段生效(预处理->编译->汇编->链接)。

那么问题来了: C语言在“编译”阶段就应该确定了地址分配,汇编之后就已经生成了二进制文件已经不可更改,然后链接时才使用.icf里的地址信息 ? 怎么感觉这是个悖论? 如果芯片地址信息在编译时要用,为什么叫“链接配置文件”,而如果编译时没用此文件,那编译时是怎么分配的地址?

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2021-07-20 17:28
    关注

    运行的时候才分配的
    全局变量只是作用域不同,具体分配和临时变量没有什么区别。不是动态分配的都在堆上

    评论

报告相同问题?

问题事件

  • 创建了问题 7月20日