总结一句话:C语言编译时,全局变量的存储地址时什么时候,由谁确定的?
具体问题:
使用IAR集成开发环境发现一个不理解的问题: IAR中有个链接文件Linker configuration file,其内容是定义所用MCU的FLASH,RAM等地址空间,并将其分配为项目需要的堆/栈/静态存储区等等空间。 因为名字是“链接文件”,所以我认为其是在“链接”阶段生效(预处理->编译->汇编->链接)。
那么问题来了: C语言在“编译”阶段就应该确定了地址分配,汇编之后就已经生成了二进制文件已经不可更改,然后链接时才使用.icf里的地址信息 ? 怎么感觉这是个悖论? 如果芯片地址信息在编译时要用,为什么叫“链接配置文件”,而如果编译时没用此文件,那编译时是怎么分配的地址?