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

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

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

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

  • 写回答

2条回答 默认 最新

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

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

    评论

报告相同问题?

问题事件

  • 创建了问题 7月20日

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题