栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第1章计算机系统漫游

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第1章计算机系统漫游

        计算机系统是由硬件和系统软件组成,共同工作来运行应用程序,那么深入了解计算机系统的硬件和软件组件是如何工作的以及这些组件是如何影响程序的正确性和性能的对我们来说至关重要。

1.1 程序的生命周期

        我们通过一次有趣的漫游历程,来使自己更深层次理解底层计算机系统以及它对应用程序的影响,逐步提升自己的能力。

        文本文件:像hello.c这样只由ASCII字符构成的文件成为文本文件;所有其他文件都称为二进制文件

        一个hello.c程序: 


#include 

int main()
{
    printf("hello, worldn");
    return 0;
}

       

        简单来说,一个c语言程序,通过编译系统,编译为可执行文件,但如果深入理解,我们需要更深层次的去理解编译系统里面的过程。 

        我们用程序的创建开始,编译系统编译,系统运行,输出简单信息,终止等过程来理解生命周期。如下图:

         

        上图四块内容分别对应着程序生命周期的四个阶段: 

          1.1.1预处理阶段:

        预处理器(cpp)根据字符以#开的头命令,修改原始C程序。比如hello.c的第一行#命令告诉预处理器读取系统头文件stdio.h的内容, 并把它直接插入程序文本中.:结果就得到了另一个C程序,hello.c –> hello.i。

        1.1.2编译阶段:

        编译器(ccl)将文本文件hello.i翻译成汇编语言程序hello.s(文本文件)。它半酣一个汇编语言程序,该程序包含函数main的定义, 每条语句都以一种文本格式描述了一条低级机器语言指令。如下所示:

main
    subq    $8, %rsp
    movl    $.LCO, %edi
    call    puts
    movl    $0, %eax
    addq    $8, %rsp
    ret
        1.1.3汇编阶段:

        接下来,汇编器(as)将hello.s翻译成机器语言指令并打包成可重定位目标程序(relocatable objectprogram)的格式, 将结果保存在二进制文件hello.o中。

        1.1.4链接阶段:

        在hello.c程序中,程序调用了printf()函数,这是C编译器都提供的标准C库中的一个函数。printf()函数存在于一个名为printf.o程序中。链接器(ld)就是负责处理这两个程序之间的合并。结果得到hello文件,这是一个可执行目标文件(可执行文件),可以被加载到内存中,系统调用执行。

        了解编译系统是如何工作的对我们有很大帮助,可以帮助我们优化程序性能;理解链接时出现的错误;避免安全漏洞。感兴趣的读者可以自行学习~

持续更新中...

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511848.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号