CPU与编译器概论(读书笔记)

     对于非计算机行业的程序猿来说,在编写C代码时无法可能写出来的代码没有那么高效,对编译器及计算机处理数据和指令的操作流程都不是很了解。下面我们就走进编译器和计算机的世界,去了解他们是怎么运作的。以下内容很多来自《深入理解操作系统》及《C性能优化》

  1、  编译器是如何运作的 

      下面就以简单的“hello world\n"为例子

#include <stdio.h>

int main()
{
    printf("hello world\n");
    return 0;
}

    在里linux系统上,完成由源文件hello.c到可执行文件hello的转化是由编译器完成的。翻译的过程分为4个阶段预处理、编译、汇编、链接一起构成了编译系统(compilation system)。


  预处理阶段

gcc -E hello.c -o hello.i
      主要作用:1、头文件全部展开写到源程序中
                         2、宏定义替换
                         3、不对程序语法作检查
   生成的hello.i文件可以自己打开看看!

  编译阶段

gcc -S hello.i -o hello.s
      作用: 1、检查语法的合法性
                   2、编译器将hello.i文件翻译成汇编文件hello.s

 汇编阶段

gcc -c hello.s -o hell.o
             汇编器将汇编文件翻译成机器指令,这是打开文件,看到是一些乱码。

链接阶段

gcc hello.o -o hello
    生成可执行代码 hello
   file hello  查看属性
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

原文地址:https://www.cnblogs.com/javawebsoa/p/2999552.html