《代码揭秘-从C/C++的角度探秘计算机系统》读书笔记 之前言和第一章

前言部分

        通常认为一个计算机程序设计高手应当具备的条件是熟练掌握至少一门计算机程序设计语言,然后有比较扎实的数据结构与算法功底。这样,基本上他已经可以从一钟比较高的视角来抽象现实问题并运用计算机来进行模拟和求解了。但是,这其实还不够,一个高效的计算机程序需要“内外兼修”。内功就是程序所使用的数据结构和算法,这是决定程序是否能够最大程度地调用和运用系统的资源。

        一个不能形成完成系统性的知识结构是空洞和脆弱的结构。

        C/C++中像指针这样的底层特性也非常适合用来揭示系统深处的东西。

第一章  绪论

        深入理解计算机系统的内部结构和工作原理并不容易,它至少涉及三门独立的科目:计算机组成原理、计算机操作系统和编译远离。

        电子计算机是根据程序化的指令来执行具体任务,集合输入、处理、存储和输出功能于一身的一种电子机器。

        通常和用户真正直接打交道的是各种各样的应用软件,如文字处理软件、游戏软件或者图像处理软件等。然而应用软件通常也不能与计算机硬件进行交流,应用软件必须在由操作系统提供的环境下才能正常运作。。

        操作系统是一个非常庞大的管理控制程序,大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理和文件管理。

        程序员编写的软件可能是具体的应用软件,可能是操作系统,当然也可能是更底层的硬件驱动程序,这里我们假设操作系统已经集合了硬件驱动程序。无论是应用软件还是操作系统,都是用计算机语言编写的。编译器也是软件,操作系统也是软件。

        一个真正的程序设计高手应该至少能够读懂一个编译器程序的内核,至少能够读懂一个操作系统的内核,这个要求并不苛刻!

        缓存提供了3种特质:最大程序上逼近寄存器的速度,但又较寄存器而言容量更大,以及较寄存器而言价格更加便宜。缓存之所以能够加快计算机的运行速度,主要在于被称为“访问局部性”原理。

        计算机语言也就是我们平时所说的程序设计语言。计算机语言是人与机器交流意思、传递指令的渠道和媒介。计算机语言氛围3类:机器语言、汇编语言和高级语言。

        汇编语言是一种用助记符表示的仍然面向机器的计算机语言。翻译程序为汇编程序。不论是汇编语言还是机器语言都是面向硬件具体操作的,因此把它们统称为低级语言是 有一定道理的。

        高语言的出现具有划时代的意义。高级语言不但将许多相关的机器指令合成为单条指令,并且都掉了与具体操作有关但与完成工作无关的细节,例如是有那个堆栈、寄存器等。世界上第一个高级语言FORTRAN诞生于1954年,它是一个完全脱离机器硬件的高级语言。耳熟能详的有FORTRAN   ALGOL     COBOL   Basic    Pascal     C    C++    Java 等。  

        Basic语言是1964年美国两位计算机科学家G.Kemeny和Thomas E.Kurtz在FORTRAN语言的基础上创造而成。Beginners' ALL-Purpose Symbolic Instruction Code.

        Pascal是17世纪法国著名科学家,于1642年曾发明了现代台式就三级的雏形机-加减法计算机。Pascal语言有瑞士苏黎世联邦工业大学的沃斯(N.Wirth)教授研制,并于1971年正式发布。

        Java平台由Java虚拟机(JVM)和Java应用编程接口构成。Java语言是一种简单的、面向对象的、分布式的、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的语言。要使机器能够明白用高级语言所写的代码,有两种可行的办法:一种是对程序进行编译;另一种是对程序进行解释。因此高级语言又分为两类,即编译类语言和解释类语言。

        C/C++、Pascal、FORTRAN、COBOL都是编译型编程语言。

        解释的执行方式类似与日常生活中“同声传译”。

        javac程序处理生成的*.class文件就是一种中间代码文件。

        编译原理是计算机学科中一门非常重要也非常底层的学科,编译程序本身就是一个复杂的翻译系统,它的过程复杂,实现更加复杂,因此编译原理被认为是计算机科学众多课程中最晦涩、最难懂的一门。

        人们在编译器的基础上进行了很多人性化的改进,并增加了诸如代码编辑、语法着色等具体的功能。经过一番包装后,朴素的编译器就变成了花枝招展的集成化开发环境IDE了。 Turbo Pascal就是世界上首批发布的DOS开发环境下的开发环境之一,它的出现使个人计算机应用程序的商用开发成为可能。

        Borland最初由Philippe Kahn与1983年创立。

        C语言一共有32个关键字,9钟控制语句,可见C语言简洁的特点。Pascal语言中的BEGIN和END,在C语言中仅仅使用大括号就代替了。

        C语言函数间通过参数传递进行信息传递,最大程度地保证函数内部实现的独立性,提高了可维护性。

        面向对象编程(Object-Oriented Programming,OOP)。面向对象编程的三大特性是继承性(Inheritance)、封装性(Encapsulation)和多态性(Polymorphism)。

        C++的STL(Standard Template Library,STL)。是一些算法(Algorithm)、容器(Container)和迭代器(Iterator)的集合。STL的代码几乎都采用了模版类的形式,提供了良好的代码重用的机会。算法库实现了100多个基本算法,如比较、交换、查找、遍历、复制、修改、移除、发转等;容器库提供了经典的数据结构,如向量、链表、栈、队列、映射等;迭代器主要是将算法和容器联系起来,起着一个中间层的作用。容器对象使用迭代器遍历其中的元素。

        C++还加入了预算符重载(Operator Overloading)、模板(Template)、异常(Exception)、RTTI、名称空间(Name Space)等等特征,这些特征影响到了很多新产生的语言。

        许多大型软件所面临的不再是单个的数学问题求解,而是纷繁复杂的数据流或信息流的控制、管理和分析。为了有效地开发和维护复杂而庞大的计算机程序,面向对象应用而生。对于计算机而言,一个对象也有两个部分:数据和方法。数据用来保存对象的属性,而方法用来完成数据的操作。

        在面向对象编程中,程序员不再面对一个个函数和变量,而是面对一个个对象。每个对象都是个完整独立的个体,它把相关的属性和行为凡在一起,对外界隔离。

        在面向对象编程中,所有模型都是建立在对象之上的,这样对象之间的通信就十分重要了。对象和对象之间是通过消息进行通信的。

        子类虽然继承了父类的全部属性和方法,但是子类同样不能访问父类private访问权限的成员,而portected和public访问权限的成员则能够被访问。继承大大提高了代码的重用度。

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值