首页 > 解决方案 > 编译过程和变量地址

问题描述

我在技术面试中被问到这个问题 “c 中的编译过程是什么?”

我回答了:

  1. 预处理器
  2. 编译器
  3. 汇编器
  4. 链接器

然后他继续

“在这些编译过程中的一个之后,程序中的所有变量都被定位并具有地址......如果有 2 个变量 A 和 B ......之后进程 A 和 B 将在内存中拥有地址"

(我认为他的意思是在每个过程之后生成的文件)

我终于回答说它是在链接器之后,因为需要定义外部值,但我不知道我说的是对还是错。

所以希望有人可以帮助我理解这个问题

标签: cembedded

解决方案


我只想对 user3386109 评论添加一些说明:

  1. 在裸机编译器的情况下,最终地址是在链接时分配的。
  2. 对于打算在操作系统(linux、windows、RT-linux...)上运行的程序,链接器会分配一个可重定位的地址,并且在程序加载时会给出最终的地址。但我不认为加载真的被认为是编译过程的一部分,我宁愿说它是程序初始化过程的一部分。

希望能帮助到你。


推荐阅读