C++程序的简单执行过程

来源:互联网 发布:知乎 刘备 王者 编辑:程序博客网 时间:2024/05/29 12:17
编译阶段:
               
       main.c---预编译--->main.i----编译-->main.s----汇编--->*.o/*.obj(二进制可重定位目标文件)
       预编译:删注释,#:预编译指令
       编译:语法、语义分析,代码的优化,汇总所有的符号
       汇编:把汇编指令转化成特定平台的机器码

      数据产生符号。
      指令只产生一个符号(函数名)。
链接阶段:

      1.合并所有obj文件的段(所有相同属性的段进行合并,组织在一个页面上),并调整段偏移和段长度,合并所有符号表进行符号解析(所有obj符号表中对符号引用的地方都要找到该符号定义的地方),分配内存地址
      2.符号的重定位(链接的核心)。
              
      main.o文件组成格式:
    强符号:已初始化的,在代码中不能出现同名的强符号
    弱符号:未初始化的
    程序的运行---》进程
    ./a.out
    1、创建虚拟地址空间到物理内存的映射(创建内核地址映射结构体),创建页目录和页表。
    2、加载代码段和数据段
    3、把可执行的文件入口地址写到CPU寄存器里面