C语言编译过程再解析

多年以前,分析过编译过程,并写了一篇博客,现在对编译过程有了更广阔的认识,记录在此

  • 编译过程 中的 链接与 编译
c 复制代码
编译过程分为
	1. 预处理
	2. 编译
	3. 汇编
	4. 链接

其中有 2个过程比较特殊,
	1. 编译
	2. 链接

对于C程序来说,链接分为
	提前链接(静态链接)
		对应下图第1行
	运行时链接(动态链接)
		对应下图第2行
对于C程序来说,编译分为
	普通编译
		.c -> 与host同架构的.o
	交叉编译
		.c -> 与host不同架构的.o
	提前编译(AoT) // Ahead-of-Time Compilation // 这里的编译也可叫做 翻译
		与host不同架构的.elf(中的指令) -> 与host同架构的.elf(中的指令)
		对应下图第6行
	运行时编译(JIT) // Just in time Compilation // 这里的编译也可以叫做 翻译
		与host不同架构的指令 -> 与host同架构的指令
		对应下图第5行
  • 解释运行 与 JIT编译运行的区别
c 复制代码
解释运行和JIT编译运行(类似qemuJIT编译+host直接运行)的区别
	以 bash 对 shell脚本的解释运行 和 qemu 的 JIT 为例

虽然两者都涉及代码的执行,但其输入和输出确实有很大差异。
1.Bash对Shell脚本的解释运行:
	输入: 输入是Shell脚本文件,包含一系列命令和操作。
	输出: 输出是执行命令后的结果,可能是文本输出、系统状态更改等。

2.QEMU的JIT(即时编译):
	输入: 输入是客户机指令,例如ARM、x86等指令集。
	输出: 输出是将这些客户机指令翻译(编译)为宿主机机器指令,以便在不同架构之间进行硬件级的仿真。
  • 几种常见的编译及加载运行方式
相关推荐
一丝晨光7 天前
苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?
java·windows·macos·objective-c·cocoa·posix·x11
青禾子的夏3 个月前
Thread model: posix
posix
一只小松许️4 个月前
Linux多线程——POSIX信号量与环形队列版本之生产消费模型
linux·同步·信号量·posix
羌俊恩4 个月前
Linux 常见的冷知识集锦
linux·rdma·posix
林沐华1 年前
【APUE】并发 — 线程
linux·ubuntu·操作系统·多线程·系统编程·c/c++·posix