| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 1.计算机系统漫游(1) -> 正文阅读 |
|
[C++知识库]1.计算机系统漫游(1) |
1.以"hello world"程序的生命周期,对计算机系统的主要概念做了一个整体的介绍。(创建)→(编译)→(运行)→(退出)
保存得到一个后缀名为 这个过程虽然是通过一条命令完成的,然而实际上编译系统的处理过程却是非常复杂的,大致可以分为四个阶段,分别为预处理、编译、汇编以及链接。 step1 预处理 step2 编译 编译器将 其中编译这一阶段包括词法分析、语法分析、语义分析、中间代码生成以及优化等等一系列的中间操作。可以康康《编译原理》。 对于编译阶段,输入 step3 汇编 汇编器根据指令集将汇编程序 step4 链接 在 hello 这个程序中,调用了printf 函数,这个函数是标准C库中的一个函数,每一个C语言的编译器都会提供。当调用 printf 这个函数时,编译器就知道要在屏幕上打印输出内容,它会将这行代码翻译成计算机可以理解的指令。 这个printf 函数在是在名为 正是因为链接器要对 此时,得到的 2.为什么要理解编译系统是如何工作的?第一、理解编译系统可以优化程序的性能 现代编译器是非常成熟的工具,通常可以生成很好的代码,作为一个程序员,我们没有必要为了写出高效的代码,而去研究编译器的内部是如何工作的。但是,我们还是需要对机器执行的代码有一个基本的了解,这样我们就知道编译器把不同的C代码转换成的机器代码是什么。 我们在写代码的时候可能会有这样的困惑,或者面试中会被问到以下类似的问题: 例如:一个switch语句是不是要比一连串的if-else要高效的多?一个函数调用的开销有多大?while循环比for循环更高效么?(3-5章有讲解) 第二、理解编译系统可以帮助我们理解链接过程中出现的错误 当你试图去构建大型程序的时候,往往涉及到各种函数库的调用。根据以往的经验,一些奇奇怪怪的错误往往都是与链接器有关的。 例如:静态变量和全局变量的区别是什么?静态库和动态库的区别是什么? 更严重的是,还有一些链接错误直到程序运行的时候才会出现。(第7章有答案) 第三、避免安全漏洞。 多年以来,缓冲区溢出(buffer overflow)是导致互联网安全漏洞的主要原因,如何避免写出的代码存在安全漏洞,第一步就是要理解数据和控制信息在程序栈上是如何存储的,了解不严谨不规范的书写方式会引起什么样的后果。(第三章中,会讲述堆栈的原理和缓冲区溢出错误,以及如何利用操作系统、编译器来降低攻击的风险) 详细请看: |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 13:00:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |