Chang's Note


  • 首页

  • 关于

  • 归档

  • 语录

【CSAPP笔记】12. 高速缓存存储器

发表于 2017-06-30 | 分类于 CSAPP
高速缓存存储器在存储层次结构中,高速缓存存储器,也叫 cache 是最接近 CPU 寄存器的那一块。 更一般而言,缓存(caching)是一个无所不在的技术。缓存的意思是:对于每层的存储设备,位于 k 层的更快更小的存储设备,都能用作位于 k+1 层的更大更慢的存储设备的缓存,这也是存储器层次结构 ...
阅读全文 »

【CSAPP笔记】11. 存储器层次结构

发表于 2017-06-29 | 分类于 CSAPP
在没有专门研究存储器系统之前,我们依赖的存储器模型是一个很简单的概念,也就是把它看成一个线性数组,CPU 能在一个常数时间内访问任何一个存储器位置。虽然在研究别的问题时,这是一个有效的模型,但是它不能反映存储器系统的实际工作方式。 存储器系统(memory system)是一个具有不同容量、成本、访 ...
阅读全文 »

【CSAPP笔记】10. 代码优化

发表于 2017-06-29 | 分类于 CSAPP
写程序的主要目标是使它在所有可能的情况下都能正确运行(bug free),一个运行得很快但有 bug 的程序是毫无用处的。在 bug free 的基础上,程序员必须写出清晰简洁的代码,这样做是为了今后检查代码或修改代码时,其他人能够读懂和理解代码。另一方面,让程序运行得更快也是一个很重要的考虑因素。 ...
阅读全文 »

【CSAPP笔记】9. 汇编语言——缓冲区溢出

发表于 2017-06-28 | 分类于 CSAPP
x86-64 Linux 内存结构先来看看一个程序在内存中是如何组织的。Linux 为每个进程维持了一段单独的虚拟地址空间。(进程是计算机科学中很深刻、很成功的一个概念。当我们在运行一个程序时,会得到一个假象,好像我们的程序是系统当中运行的唯一程序,独占存储器和处理器资源。) 最上面是栈(sta ...
阅读全文 »

【CSAPP笔记】8. 汇编语言——数据存储

发表于 2017-06-27 | 分类于 CSAPP
下面介绍一些C语言中常见的特殊的数据存储方式,以及它们在汇编语言中是如何表示的。 数组数组是一种将标量数据聚集成更大数据类型的方式。实现数组的方式其实十分简单,也非常容易翻译成机器代码。C语言的一个特点是可以产生指向数组元素的指针,然后可以对这些指针进行运算。 数组的基本原则如下: 对于数组的声明: ...
阅读全文 »

【CSAPP笔记】7. 汇编语言——过程调用

发表于 2017-06-26 | 分类于 CSAPP
一个过程调用包括将数据(以参数和返回值的形式)与控制从代码的一部分传递到另一部分。除此之外,在进入时为过程的局部变量分配空间,在退出的时候释放这些空间。数据传递、局部变量的分配和释放通过操纵程序栈来实现。栈作为一种能够实现先进后出、后进先出的数据结构,非常适合用于实现函数调用以及返回的机制。 在过程 ...
阅读全文 »

【CSAPP笔记】6. 汇编语言——控制

发表于 2017-06-25 | 分类于 CSAPP
到目前为止我们只考虑了直线代码的执行行为,也就是指令一条接着一条执行。C语言中的某些语句,比如条件语句、循环、分支语句,要求有条件地执行,或根据某些表达式的结果决定操作的顺序。机器代码提供基本的低级机制来实现有条件的行为:测试数据值,然后根据测试结果来改变控制流或数据流。 先介绍通过控制流来实现有条 ...
阅读全文 »

【CSAPP笔记】5. 汇编语言——数据

发表于 2017-06-25 | 分类于 CSAPP
本博客对于汇编的介绍基于32位机器的Intel x86系列处理器和IA32指令集,也涉及少部分x86-64。由于汇编知识相对复杂,这里只做简单介绍和记录,详细请参照书本! 数据格式下面这张表格中体现了C语言基本数据类型和IA32的对应表示。 C语言中的声明 Intel 数据类型 汇编代码后缀 ...
阅读全文 »

【CSAPP笔记】4. 汇编语言——基础

发表于 2017-06-25 | 分类于 CSAPP
程序的机器级表示计算机能读懂是机器代码(machine code)—— 用字节序列编码的低级操作 —— 也就是0和1。编译器基于编程语言的规则、目标机器的指令集和操作系统的规则,经过一系列阶段产生机器代码。由于机器语言全是由0和1组成的,所以对于编程人员来说编写机器代码十分困难,也不容易学习。汇编语 ...
阅读全文 »

【CSAPP笔记】3. 浮点数

发表于 2017-06-25 | 分类于 CSAPP
回想起刚学C语言时,我对浮点数的印象大概是“能够表示小数”的数据类型。还死记硬背过例如什么“小数用 double 存,用 %f 输出”这类的话。实际上呢,浮点数可以用这么一个公式来概括: $$ \sum_{k=-j}^i b_k×2^k$$ 除了我们所熟知的,表示小数之外,它对执行涉及非常大的数字、 ...
阅读全文 »

【CSAPP笔记】2. 整型运算

发表于 2017-06-25 | 分类于 CSAPP
现在想补补推荐这本书的理由。 Most books on systems—computer architecture, compilers, operating systems, and networking—are written as if the reader were going to d ...
阅读全文 »

【CSAPP笔记】1. 位、字节、整型

发表于 2017-06-24 | 分类于 CSAPP
《Computer Systems a Programmer’s Perspective》,机械工业出版社。中文译名《深入理解计算机系统》。作者:(美)Randal E.Bryant / David O’Hallaron 想写点推荐理由,作罢,原因是自己学识尚浅(留坑以后写?)。这里附上几个链接, ...
阅读全文 »

C++学习之智能指针

发表于 2017-06-22 | 分类于 Cpp
智能指针是行为类似于指针的类对象,同时还有其他的功能。 我们知道,通过new分配的内存要及时delete,如果不及时回收,会导致内存泄漏。有的时候,我们可能会忘记delete,有没有更好的解决方法呢?假设我们在一个函数中new了一块内存,并让一个指针p指向这块内存。当函数返回时,指针p占据的内存将被 ...
阅读全文 »

C++学习之string类

发表于 2017-06-22 | 分类于 Cpp
许多的程序涉及字符串处理,C语言就在头文件string.h中提供了一系列字符串函数。C++的string类包含在头文件string里。要使用类,关键就在于了解它的公有接口。string类包含大量的方法,包括若干构造函数、赋值、合并、比较、访问各个元素的运算符重载以及用在字符串中查找子串的工具等等。 ...
阅读全文 »

C++学习之模板

发表于 2017-06-07 | 分类于 Cpp
泛型编程继承(公有、私有、保护)和包含,并不总能够满足重用代码的需要。 有一种概念,叫做容器(container class)。例如Stack、Queue。容器是用来设计存储各种对象和数据类型的。但之前提到的ADT中,我们把Stack设计成只能存储unsigned long 值。如果我们想建立保存d ...
阅读全文 »

C++学习之多重继承

发表于 2017-06-07 | 分类于 Cpp
多重继承定义多重继承,multiple inheritance,简称MI。在现实中,也许某种事物具有两种或以上的种类的事物的基础属性,所以C++中有多重继承这种手段来解决这种问题。即允许一个派生类指定多个基类。例如下面这个类,从侍者类公有继承,从歌手类私有继承,得到一个“会唱歌的侍者”类: 1234 ...
阅读全文 »

C++学习之包含对象的类、私有和保护继承

发表于 2017-06-07 | 分类于 Cpp
C++的一个主要目的是促进代码重用。公有继承是实现这种目标的方式之一。但不是唯一的方式。其他方法:使用本身就是另一个类的对象的类成员。例如Stock类中包含一个string类成员。这种方式成为包含(containment)、组合(composition)或层次化(layering)。以及使用私有或保 ...
阅读全文 »

C++学习之类继承和动态内存分配

发表于 2017-06-07 | 分类于 Cpp
如果基类使用的动态内存分配,并重新定义了赋值和复制构造函数,这将怎样影响派生类的实现? 情况1:派生类不使用new假设基类在构造函数中使用new,析构函数、复制构造函数和重载赋值运算符也做了相应处理。现在,从base类派生出一个类,这个派生类不使用new,只是包含一些新的数据而已。那么就不需要为派生 ...
阅读全文 »

C++学习之抽象基类

发表于 2017-06-07 | 分类于 Cpp
抽象基类和纯虚函数至此,已经介绍了简单继承和较为复杂的多态继承。接下来介绍抽象基类(Abstract base class, ABC) 有些时候,继承关系并不是is-a那样简单。例如在开发图形程序时,可能会涉及到椭圆和圆,会有Ellipse类和Circle类。因为所有的圆都是特殊的椭圆,所以考虑从E ...
阅读全文 »

C++学习之虚函数和联编

发表于 2017-06-07 | 分类于 Cpp
RatedPlayer继承示例很简单。派生类对象使用基类的方法,并未做任何修改。然而,可能遇到希望同一个方法在基类和派生类中的行为是不同的。即希望方法的行为应取决于调用对象,也是一种多态(Polymorphism)——具有多种形态。有两种重要机制可以使用多态公有继承: • 在派生类中重新定义基类方法 ...
阅读全文 »
<1…456>

116 日志
12 分类
© 2024 Chang
由 Hexo 强力驱动
主题 - NexT.Mist