C++程序的执行过程包括:
.cpp
            
            
              bash
              
              
            
          
          预处理.i、编译.s、汇编.o、链接(可执行文件)、加载(内存)、程序执行(cpu)。
            
            
              bash
              
              
            
          
          预处理:将头内容文件插入当前文件,展开宏,删除注释
编译:将c++源代码 翻译成 汇编语言
汇编:将汇编语言-》二进制机器码
链接:将不同文件整合成一个可执行文件,符号解析,地址分配,重定位,链接静态动态库,生成可执行文件;
静态链接:复制库代码:把需要的库函数代码复制到可执行文件中;生成独立的可执行文件,不依赖外部库文件
动态链接:不复制代码:只在可执行文件中记录需要哪个动态库;
         运行时加载:程序启动时由动态链接器加载所需的库;
重定位:
		地址解析:找到所有未确定地址的实际位置
		代码修正:把占位符地址替换为实际地址
		符号绑定:将符号引用连接到符号定义
            
            
              bash
              
              
            
          
          例:
cpp
// file1.cpp
int global = 100;
// file2.cpp
extern int global;
int main() {
    return global;  // 需要重定位:global的实际地址
}C++将程序编译成汇编语言最终编译成成机器命令码 ,cpu直接执行机器码,因此高效;
优点是执行起来快,缺点是对环境有依赖;
换个操作系统/CPU架构/字长/库版本,就需要重新编译;
因为:
不同操作系统上,系统调用API不同,汇编语言不兼容,汇编语言格式不同操作系统是不同的,目标文件格式不同,因此需要重新编译;
2、JAVA
java语言执行过程:
            
            
              bash
              
              
            
          
          java源代码-字节码-JVM加载- 解释执行 + JIT编译 - 优化的机器码Java语言首先将程序翻译成字节码,之后程序去执行字节码,执行过程中再由翻译器将字节码翻译成机器码去执行,因此执行过程较慢,但好处是换个环境也能执行,不依赖环境
python语言是换个环境