学习c++内存操作之硬件介绍

来源:互联网 发布:android demo源码下载 编辑:程序博客网 时间:2024/06/06 03:08

在学习c++内存操作之前,首先需要了解一下c++内存操作的目的:主要是用来对数据进行空间分配,其重点在于数据和空间,而数据是用来被cpu进行操作的,空间是用来存储数据的。所以,要想了解内存的操作,需要补充一点关于cpu的工作过程的知识及存储器的基本概念。以下内容主要来源于百度百科的解释:

1.cpu的基本工作过程:

cpu从存储器或高速缓存存储器(cpu操作内存中常用数据的过渡)中取出指令,放入指令寄存器(是cpu的一部分),并对指令译码,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。

提取

第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(Program Counter)指定存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了CPU在程序里的踪迹。)

解码

CPU根据存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令。一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(Addition)运算的运算目标。

执行

在提取和解码阶段之后,紧接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。
例如,要求一个加法运算,算术逻辑单元(ALU,Arithmetic Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而输出将含有总和的结果。ALU内含电路系统,易于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里可能会设置运算溢出(Arithmetic Overflow)标志。

写回

最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体中。某些类型的指令会操作程序计数器,而不直接产生结果。这些一般称作“跳转”(Jumps),并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。许多指令会改变标志暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值大小,根据比较结果在标志暂存器上设置一个数值。这个标志可藉由随后跳转指令来决定程式动向。在执行指令并写回结果之后,程序计数器值会递增,反覆整个过程,下一个指令周期正常的提取下一个顺序指令。
 
与此同时,为了后边解释代码优化方面知识,这里扩充一下缓存的概念

2.缓存

缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是由于CPU芯片面积和成本的因素来考虑,缓存都很小。
L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32-256KB。
L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,以前家庭用CPU容量最大的是512KB,笔记本电脑中也可以达到2M,而服务器和工作站上用CPU的L2高速缓存更高,可以达到8M以上。
L3 Cache(三级缓存),分为两种,早期的是外置,内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。
其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。
但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。
 

3.存储器

存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正常工作。按用途存储器可分为主存储器(内存)和辅助存储器(外存),也有分为外部存储器和内部存储器的分类方法。外存通常是磁性介质或光盘等,能长期保存信息。内存指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。

按用途

     根据存储器在计算机系统中所起的作用,可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器等。

        为了解决对存储器要求容量大,速度快,成本低三者之间的矛盾,通常采用多级存储器体系结构,即使用高速缓冲存储器、主存储器和外存储器

用途特点

高速缓冲存储器Cache 高速存取指令和数据存取速度快,但存储容量小
主存储器内存存放计算机运行期间的大量程序和数据存取速度较快,存储容量不大
外存储器外存存放系统程序和大型数据文件及数据库存储容量大,位成本低


4.寄存器、存储器及cache之间的区别

(转自http://wenku.baidu.com/view/536bc26ba45177232f60a246.html)

寄存器跟存储器有什么区别? 

如仅讨论CPU的范畴 :寄存器是CPU内部存储单元,在cpu的内部,,寄存器只是用来暂时存储,是临时分配出来的,断电,后,里面的内容就没了,容量小,速度快,数目有限,CPU访问几乎没有任何延迟,分通用寄存器、特殊功能寄存器,寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 
存储器范围最大,它几乎涵盖了所有关于存储的范畴。你所说的寄存器,内存,都是存储器里面的一种。凡是有存储能力的硬件,都可以称之为存储器,这是自然,硬盘更加明显了,它归入外存储器行列,由此可见——。而通常说的存储器是独立于cpu之外的,,容量大,速度稍慢 ,比如内存,硬盘,光盘等。 
从根本上讲,寄存器与RAM的物理结构不一样。一般寄存器是指由基本的RS触发器结构衍生出来的D触发, 就是一些与非门构成的结构,这个在数电里面大家都看过;而RAM则有自己的工艺,一般1Bit由六MOS管构成。所以, 这两者的物理结构不一样也导致了两者的性能不同。寄存器访问速度快,但是所占面积大。而RAM相反,所占面积小,功率低,可以做成大容量存储器,但访问速度相对慢一点。 
一般数据在内存里面,要处理(或运算)的时候,读到寄存器里面,然后CPU到寄存器里面拿值,拿到运算核内部,算好了在送到寄存器里面,再到内存。 
 

寄存器和cache区别  

cache是一个高速小容量的临时存储器,可以用高速的静态存储器芯片实现,或者集成到CPU芯片内部,存储CPU最经常访问的指令或者操作数据。 
而寄存器不同,寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径,寄存器存放的是当前CPU环境以及任务环境的数据,而cahe则存放最近经常访问的指令和数据的. 
把CPU比做大脑  寄存器就像你正在思考的问题,而cahe就是你的记忆(临时的)  
大脑的其他部分存储了记忆,但是大脑直接处理比较慢则需要一个更加快的地方来临时存放你从大脑其他部分提取的记忆这个地方就是cahe 
当然不一样,寄存器是CPU为了运算,存储关键数据的和临时数据的,cache是为了弥补CPU和内存的速度上的差异设置的缓存cache   是给cpu用的,Cache是存储内存中你用过的数据,而且尽量存储用的频繁的数据 
寄存器是CPU为了运算,必须要有的临时存放数据的器件,而cache是为了弥补CPU和内存的速度上的差异设置的缓存 
Register可以给Programer用,cache的速度在register与内存之间,所以叫他缓存,起到弥补CPU和内存的速度上的差异这个作用,但是register是为了运算而设置的临时存储单元,register是直接与CPU接触的,是程序员控制CPU的工具,cpu的cache就是高速缓存, 分一级和二级,全速和半速,空间相寄存器来说比较大 ,而register也就是寄存器,是cpu内部运算和执行指令时存放数据的存储器,相对cache来说,空间小很多。  

内存解释: 

内存既专业名上的内存储器,它不是个什么神秘的东西,它也只是存储器中的沧海一粟,它包涵的范围也很大,一般分为只读存储器和随即存储器,以及最强悍的高速缓冲存储器(CACHE),ROM:只读存储器应用广泛,它通常是一块在硬件上集成的可读芯片,作用是识别与控制硬件,它的特点是只可读取,不能写入。RAM:随机存储器的特点是可读可写,断电后一切数据都消失,我们所说的内存条就是指它了。CACHE是在CPU中速度非常块,而容量却很小的一种存储器,它是计算机存储器中最强悍的存储器。由于技术限制,容量很难提升,一般都不过兆http://www.doc88.com/p-251201232195.html

 

原创粉丝点击