摘要:
1、如果你的程序需要的数据是存储在CPU寄存器中的,那么在执行期间,在零个周期内就能访问到它们。如果存储在高速缓冲中,需要1~10个周期。如果存储在主存中,需要50~100个周期。如果存储在磁盘上,需要约20000000个周期。 2、随机访问存储器(RAM,Random-access memory)分为两类-静态和动态的。静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。SRAM用... 阅读全文
摘要:
1、编译技术被分为“与机器无关”和“与机器相关”两类。“与机器无关”,使用这些技术时可以不考虑将执行代码的计算机的特性;而“与机器有关”,指这些技术依赖于许多机器的低级细节。2、最小二乘法拟合3、优化之一:消除循环的低效率将循环中需要每次计算,但是计算结果不会改变的语句移出去,称为代码移动(code motion)。4、减少不必要的过程调用。如可以确保边界安全的情况下,就不需要每次都进行边界安全检查。5、消除不必要的存储器引用示例代码void Test1(int *pToInt){ *pToInt = 0; for (int i = 0; i < 10; i++) { *pToInt + 阅读全文
摘要:
1、CISC(Complex Instruction Set Computing),RISC(Reduced Instruction-Set Computer),MIPS(Million Instructions Per Second)。2、CISC编码是可变长度的,IA32的指令长度可以是1~15;RISC编码是固定长度的,通常所有的指令都是编码为4个字节。3、在硬件设计中,电子电路被用来计算位的函数(function on bits),以及在各种存储元素中存储位。大多数现代电路技术都用信号线上的高电压或低电压来表示不同的位值。要实现一个数字系统需要三个主要的组成部分:计算位的函数的组合逻辑 阅读全文
摘要:
1、Intel现在称其指令集为IA32,即Intel 32位体系结构(Intel Architecture 32-bit),这个处理器也俗称为“x86”。2、Linux使用了平面寻址方式(flat addressing),在这种寻址方式中,程序员将整个存储空间看做一个大的字节数组。3、在平面寻址中,对特殊寄存器的需求已经大为降低了。在大多数情况下,前六个寄存器都可以看作是通用寄存器,对它们使用的没有限制。4、对于C语言中比如if表示式,switch,while,for循环等对应的汇编表示,在本书都有详细描述,对于研究汇编写程序有极大帮助。此略。5、一个过程调用包括将数据(以过程参数和返回值的形 阅读全文
摘要:
1、机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器(virtual memory)。存储器的每个字节都由一个唯一的数字来标识,称为地址(address),所有可能地址的集合就称为虚拟地址空间(virtual address space)。虚拟地址空间是一个展现给机器级程序的概念性映像(image),具体的实现使用的是随机访问存储器RAM,磁盘存储,特殊硬件和OS软件的结合,来为程序提供一个看上去统一的字节数组。2、指值有两个方面:它的值和它的类型。它的值表示的是某个对象的位置,而它的类型表示那个位置上所存储对象的类型(如int,float)。3、每台计算机都有一个字长(word s 阅读全文
摘要:
1、系统的硬件组成Figure1 Hardware organization of a typical system. CPU: Central Processing Unit, ALU: Arithmetic/Logic Unit, PC: Program counter, USB: Universal Serial Bus.1)总线贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。各个系统中字长不尽相同,intel pentium系统的字长为4字节。2)I/O设备 I/O设备是系统与外界的联系通道。 控制器是I/O设备 阅读全文
摘要:
1、标准库还提供了丰富的支持未格式化IO的低级操作,这些操作使我们能够将流作为未解释的字节序列处理,而不是作为数据类型(如char,int,string等)的序列处理。2、单字节操作几个未格式化的操作一次一个字节地处理流,它们不忽略空白地读。示例代码#include <iostream>#include "string"#include "cmath"#include "iomanip"using namespace std;int main(){ //默认情况下,输入操作符忽略空白 while(cin >> 阅读全文
摘要:
1、除了条件状态之外,每个iostream对象还维持一个控制IO格式化细节的状态。如整形值的基数,浮点值的精度,输出元素的宽度等。标准库还定义了一组操纵符来修改对象的格式状态。操纵符(manipulator)是可用作输入或输出运算符的操作数,它是一个函数或对象(a manipulator is a function or object that can be used as an operand([计]操作数;运算对象) to an input or output operator(运算符).)。操纵符返回其应用于的流对象,所以可以在一个语句中输出多个操纵符和数据。2、操纵符罗列表1 iost 阅读全文
摘要:
1、程序可以从一个机器容易得移植到其他机器,则称此程序是可移植的。C语言是可移植的。当然,C语言也定义了一些固有的不可移植的特性:1)算术类型的大小随机器不同而变化。C++另外两个从C语言继承来的不可移植的特性:位域和volatile限定符(这两个特性使与硬件的直接通信更容易),链接批示(使得可以链接到用其他语言编写的程序)。2、位域 位域(bit-field):来保存选定的位数。当程序需要将二进制数据传递给另一个程序或硬件设备的时候,通常使用位域。位域在内存中的布局是机器相关的。位域必须是整形数据类型,可以是signed或unsigned。http://www.cnblogs.com/myd 阅读全文
摘要:
1、联合(union)是一种特殊的类。一个union对象可以有多个数据成员,但是任何时刻,只有一个成员可以有值。当将一个值赋给union对象的一个成员的时候,其他所有成员都变为未定义的。每个 union 对象的大小在编译时是固定的:至少与最大数据成员的一样大。2、union不能作为基类使用,所以成员函数不能为虚函数。union不能具有静态数据成员或引用成员,而且,union不能具有定义了构造函数,析构函数或赋值操作符的类类型的成员。3、默认情况下,union对象是未初始化的。可以用与显式初始化、简单类对象一样的方法显式初始化union对象。但是,只能为第一个成员提供初始化式,通过一对花括号。通 阅读全文