zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【python爬虫实战】使用词云分析来分析豆瓣影评数据
    【python爬虫实战】爬取豆瓣影评数据
    【个人博客设计】开发工具篇
    使用xmake优雅地描述工程
    使用lua实现try-catch异常捕获
    tbox新增stackless协程支持
    如何快速构建一个简单的程序
    手写数字识别系统之倾斜矫正
    手写数字识别系统之图像分割
    聊聊原子操作那些事
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2999552.html
Copyright © 2011-2022 走看看