c - 编译过程和变量地址
问题描述
我在技术面试中被问到这个问题 “c 中的编译过程是什么?”
我回答了:
- 预处理器
- 编译器
- 汇编器
- 链接器
然后他继续
“在这些编译过程中的一个之后,程序中的所有变量都被定位并具有地址......如果有 2 个变量 A 和 B ......之后进程 A 和 B 将在内存中拥有地址"
(我认为他的意思是在每个过程之后生成的文件)
我终于回答说它是在链接器之后,因为需要定义外部值,但我不知道我说的是对还是错。
所以希望有人可以帮助我理解这个问题
解决方案
我只想对 user3386109 评论添加一些说明:
- 在裸机编译器的情况下,最终地址是在链接时分配的。
- 对于打算在操作系统(linux、windows、RT-linux...)上运行的程序,链接器会分配一个可重定位的地址,并且在程序加载时会给出最终的地址。但我不认为加载真的被认为是编译过程的一部分,我宁愿说它是程序初始化过程的一部分。
希望能帮助到你。
推荐阅读
- javascript - Bootstrap JS 未正确加载
- java - 如何从数据库中获取用户以使用 Spring Boot 和 Spring Data Jpa 登录
- apache-spark - Databricks 增量表截断包含“-”的列数据
- sql - 如何在 PostgreSQL 中查找两个日期之间的间隔
- express - 我们如何对 put 请求密码进行哈希处理?
- c# - 如何订购角色层次结构以访问 MVC5 中的授权页面?
- mysql - 如何使此 sql 查询与 mysql 的旧版本(如 v.5.5 及更高版本)兼容?
- java - 如何使用 JPA Criteria Builder 按长度(列名)排序
- javascript - angular 8 routerLink 在 ios 设备浏览器中无法正常工作
- google-apps-script - Google-sheet:从导入的范围中选择相关单元格