文档库 最新最全的文档下载
当前位置:文档库 › 内存类型区别

内存类型区别

内存类型区别
内存类型区别

区别内存条类型

从外观区别DDR和DDR2,DDR3内存

防呆缺口:

DDR1内存单面金手指针脚数量为92个(双面184个),缺口左边为【52】个针脚,缺口右边为【40】个针脚;

DDR2内存单面金手指针脚数量为120个(双面240个),缺口左边为【64】个针脚,缺口右边为【56】个针脚;

DDR3内存单面金手指针脚数量为120个(双面240个),缺口左边为【72】个针脚,缺口右边为【48】个针脚.

2、

DDR内存的颗粒为长方形

DDR2和DDR3内存的颗粒为正方形,而且体积大约只有DDR内存颗粒的三分之一。

3、使用电压不同

查看内存插槽的标注。

内存插槽中间部分都会有电压标注:如3.3V、2.5V、1.8V等,按照这个标注就可以判断此主板支持的内存类型。

内存插槽标记“3.3V”为 SD内存

内存插槽标记“2.5V”为 DDR1代内存

内存插槽标记“1.8V”为 DDR2代内存

内存插槽标记“1.5V”为 DDR3代内存

内存中的各区域的分配

程序中用来存放数据的内存分为四块,其实另有一块用于存放代码,这里我们不讨论,这四块分别是: 1、全局区(静态区)(static):全局变量和静态变量都存储在这块区域,与其他变量的明显区别就是生命周期不同,在程序结束时,系统会释放这块资源 2、文字常量区:常量字符串就是放在这块区域,即是我们常说起的常量池。这块也是在程序结束时由系统释放。 3、栈区(stack):存放函数的参数值,局部变量的值等。这块的数据大家就很熟悉了,在进入作用域时分配占用内存,离开作用域时释放占用内存 4、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收。由于这个原因,在C和C++中就有能产生大量程序员分配但忘记释放的堆区内存,造成可使用内存越来越少,这个被称之为内存泄露。而在java中,因为有了垃圾收集机制,这样的内存会被自动处理掉,所以在java中,反倒不需要程序员去释放内存了。 那么栈和堆的区别到底在哪里呢? 1、内存分配方面: 堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、申请方式方面: 堆:需要程序员自己申请,并指明大小。在c中malloc函数如p1 = (char *)malloc(10);在C++,java中用new运算符,但是注意p1、p2本身是在栈中的。因为他们还是可以认为是局部变量。 栈:由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b 开辟空间。 3、系统响应方面: 堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码中的delete语句才能正确的释放本内存空间。另外由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 4、大小限制方面: 堆:是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。 栈:在Windows下, 栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是固定的(是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 5、效率方面: 堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方

内存条的种类

内存条的种类 老的内存有FPM、EDO、SDRM,后来的有DDR、DDR2、DDR3、RDRAM 目前能见到的内存有:SDR、DDR、DDR2 ,DDR3三类。比如说DDR 800后面所带的数字表示内存的频率,数字越高速度越快。 内存的价格非常不稳定,没办法讨论其性价比。 性能从低到高分别是:SDR DDR DDR2 DDR3 外观: SDR一般有两个缺口 DDR1的缺口比较靠外 DDR2的缺口比较靠中间 DDR2代和DDR3代的槽是一样的 其中DDR与DDR2的区别很不明显,DDR是184线接口,DDR2是240线接口,金手指比DDR的要密看标识,上面写的很清,下面用图片来直观的说一下其中的区别吧 延迟问题

在同等核心频率下,DDR2的实际工作频率是DDR的两倍。这得益于DDR2内存拥有两倍于标准DDR内存的4BIT预读取能力。换句话说,虽然DDR2和DDR一样,都采用了在时钟的上升延和下降延同时进行数据传输的基本方式,但DDR2拥有两倍于DDR的预读取系统命令数据的能力。也就是说,在同样100MHz的工作频率下,DDR的实际频率为200MHz,而DDR2则可以达到400MHz。 这样也就出现了另一个问题:在同等工作频率的DDR和DDR2内存中,后者的内存延时要慢于前者。举例来说,DDR 200和DDR2-400具有相同的延迟,而后者具有高一倍的带宽。实际上,DDR2-400和DDR 400具有相同的带宽,它们都是3.2GB/s,但是DDR400的核心工作频率是200MHz,而DDR2-400的核心工作频率是100MHz,也就是说DDR2-400的延迟要高于DDR400。 封装和发热量: DDR2内存技术最大的突破点其实不在于用户们所认为的两倍于DDR的传输能力,而是在采用更低发热量、更低功耗的情况下,DDR2可以获得更快的频率提升,突破标准DDR的400MHZ限制。 DDR内存通常采用TSOP芯片封装形式,这种封装形式可以很好的工作在200MHz上,当频率更高时,它过长的管脚就会产生很高的阻抗和寄生电容,这会影响它的稳定性和频率提升的难度。这也就是DDR的核心频率很难突破275MHZ的原因。而DDR2内存均采用FBGA封装形式。不同于目前广泛应用的TSOP封装形式,FBGA封装提供了更好的电气性能与散热性,为DDR2内存的稳定工作与未来频率的发展提供了良好的保障。 DDR2内存采用1.8V电压,相对于DDR标准的2.5V,降低了不少,从而提供了明显的更小的功耗与更小的发热量,这一点的变化是意义重大的。 DDR2采用的新技术: 除了以上所说的区别外,DDR2还引入了三项新的技术,它们是OCD、ODT和Post CAS。 OCD(Off-Chip Driver):也就是所谓的离线驱动调整,DDR II通过OCD可以提高信号的完整性。DDR II通过调整上拉(pull-up)/下拉(pull-down)的电阻值使两者电压相等。使用OCD通过减少DQ-DQS的倾斜来提高信号的完整性;通过控制电压来提高信号品质。 ODT:ODT是内建核心的终结电阻器。我们知道使用DDR SDRAM的主板上面为了防止数据线终端反射信号需要大量的终结电阻。它大大增加了主板的制造成本。实际上,不同的内存模组对终结电路的要求是不一样的,终结电阻的大小决定了数据线的信号比和反射率,终结电阻小则数据线信号反射低但是信噪比也较低;终结电阻高,则数据线的信噪比高,但是信号反射也会增加。因此主板上的终结电阻并不能非常好的匹配内存模组,还会在一定程度上影响信号品质。DDR2可以根据自已的特点内建合适的终结电阻,这样可以保证最佳的信号波形。使用DDR2不但可以降低主板成本,还得到了最佳的信号品质,这是DDR不能比拟的。

WINCE驱动开发中几个内存分配函数比较

【转】LocalAlloc,VirtualAlloc,malloc,new的异同首先明白几个概念:虚拟内存是从硬盘置换出来的,堆本身就是内存,程序运行时,可用内存=物理内存+虚拟内存。虚拟内存一般用文件来保存数据,虚拟内存的出现主要是因为以前内存不够(16M的内存刚出来的时候可是天价啊),磁盘相对便宜一些,所以聪明的系统设计者就把设计了虚拟内存,在程序运行的时候把那些很久没有被访问过的(可能以后也不会用到)内存映射到文件里面去(以后需要的时候再读进内存),把内存腾出来给真正需要执行的代码和数据,这样看起来可用内存就比物理内存多了。 HeapAlloc()是堆分配内存函数,查看c,c++的malloc,new函数的代码,可以看到就是对HeapAlloc()函数的封装,在堆上可以动态分配内存。 1. 首先我们来看HeapAlloc: MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局堆上分配,这个有可能是全局,也有可能是局部。函数原型为: LPVOID HeapAlloc( HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes ); hHeap是进程堆内存开始位置。 dwFlags是分配堆内存的标志。包括HEAP_ZERO_MEMORY,即使分配的空间清零。 dwBytes是分配堆内存的大小。 其对应的释放空间函数为HeapFree。 2. 再看GlobalAlloc:该函数用于从全局堆中分配出内存供程序使用,函数原型为: HGLOBAL GlobalAlloc( UINT uFlags, SIZE_T dwBytes ); uFlags参数含义 GHND GMEM_MOVEABLE和GMEM_ZEROINIT的组合 GMEM_FIXED 分配固定内存,返回值是一个指针 GMEM_MOVEABLE 分配活动内存,在Win32中,内存块不能在物理内存中移动,但能在默认的堆中移动。返回值是内存对象的句柄,用函数GlobalLock可将句柄转化为指针 GMEM_ZEROINIT 将内存内容初始化为零 GPTR GMEM_FIXED和GMEM_ZEROINIT的组合

C语言内存分配函数

SDRAM_BANK2地址分配: /********************************固定部分*************************************/ 屏幕层1(1280*800) 0xD0000000 - - 0xD01F4000 一层屏幕占0x1F4000 屏幕层2(1280*800) 0xD01F4000 - - 0xD03E8000 一层屏幕占0x1F4000 108音符+刷新(36*36) 0xD0400000 - - 0xD0445154 一个音符占0xA24 10根手指+按下(110*100) 0xD0445154 - - 0xD04B0864 一根手指占0x55F4 除拇指外四指覆盖层(50*50) 0xD04B0864 - - 0xD04B5694 一个覆盖层占0x138C 手腕连同背景(300*200) 0xD04B5694 - - 0xD04F001C 一个背景占0x3A988 按键图标背景(1280*60) 0xD04F001C - - 0xD0515820 一个背景占0x25804 AB点循环+取消循环图标(96*41) 0xD0515820 - - 0xD05195A8 一个图标占0x1EC4 AB断点图标(41*30) 0xD05195A8 - - 0xD051A8E8 一个图标占0x09A0 其他按键图标(48*41) 0xD051A8E8 - - 0xD052DCB8 一个图标占0xF64 沙漏(150*120) 0xD052DCB8 - - 0xD053695C 一个沙漏占0x8CA4 卷轴(480*30) 0xD053695C - - 0xD053D9E0 一个卷轴占0x7084 倒计时(30*30) 0xD053D9E0 - - 0xD0542E70 一个倒计时图标占0x70C xpt一行变两行xpesqe (5000) 0xD0542E70 - - 0xD05789D0 一个结构体占0x2C xpt排序xptall (5000) 0xD05789D0 - - 0xD05E4090 一个结构体占0x58 /********************************变动部分*************************************/ 初始化选歌曲目(96*64) 0xD05F0000 - - 0xD06740B0 一首选歌曲目占0x3004 初始化界面图标(1280*60) 0xD06740B0 - - 0xD06998B4 一个图标占0x25804 乐谱上、下部分(640*219) 0xD06998B4 - - 0xD0E15D24 一个结构体占0x44704 乐谱中间部分(640*42) 0xD0E15D24 - - 0xD0ECD95C 一个结构体占0xD024 歌曲名(1280*60) 0xD0ECD95C - - 0xD0EF3160 一个歌曲名占0x25804

内存名称详解

内存名称详解 PC-66 这种内存使用66MHz的频率,而这也是第一代的SDR SDRAM内存。 PC-100 同样的,这种内存只是将工作频率提升到了100MHz,工作在CAS3模式下。 PC-133 这次改变还是只是将频率提升到133MHz,同样工作在CAS3模式下。 PC-150 这种内存并非官方发布的一个版本,而PC-150实际上就是一个超频版的内存。通常这种内存可以运行在150MHz频率CAS3模式或者是133MHz频率CAS2模式下,但是据说Corsair 的PC-150内存可以在150MHz 的频率下以CAS2的模式工作。 PC-166 另外一类超频内存,只是单纯的超频使得频率达到了一个新高点而已,仍然运行在CAS3之下。 PC-180 可以算作是另类的超频内存了,它简单的将频率提升到了180MHz,但是我个人认为这种内存没有实际使用的意义,因为毕竟现在DDR内存的价格已经是非常便宜了。 DDR SDRAM DDR内存按照速度分类就可以用两种方法来进行分类了。第一种就是以DDRXXX这种方式命名。后边的“XXX”就表示了这个内存是以两倍于XXX的速度运行的内存。另外一种就是以PCXXXX进行命名。后边的“XXXX”就是内存的带宽。 PC1600 此类DDR内存就是最早的一代DDR内存了。它的工作频率为200MH(由于是DDR内存,所以频率增加一倍,就是100MHz x2所以实际上这类内存是工作在200MHz的频率下的),而工作模式为CAS2.5。 DDR266/PC2100 现在最普遍见到的DDR内存,工作频率为266MHz,工作模式为CAS2.5。 PC2400 又是一个非官方版本的DDR内存。实际上就是通过对内存颗粒的筛选、改造而制造成质量上乘的超频DDR内存。这样,让它们可以在150MHz(实际使用中双倍变为300MHz)的频率下工作在CAS2的模式下。Corsair就是其中的一个厂商。 DDR333/PC2700 官方发布的一个DDR内存版本,通过将内存频率增加到166MHz DDR(实际工作中双倍变为333MHz)的CAS2.5模式,来提升系统性能。

c内存分配

c/C++内存分配 作者:来源:csdn 发布者:admin 时间:2009-07-09 12:50:19 点击:3883 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。 例子程序 这是一个前辈写的,非常详细 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char *p3 = "123456"; 123456\0在常量区,p3在栈上。 static int c =0;全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向 的"123456"优化成一个地方 } 二、堆和栈的理论知识 2.1申请方式 stack:

4G内存条的终极解释

昨天刚换4G内存虽然是64BIT windows7 但是依然无法完全使用。可用内存只有3G。。。坛子上搜了不少帖子发现时主板问题。。 SIS671DX 号称支持4G内存的主板。。实际在操作系统里是无法完全使用的。。。内存映射PAE这些选项在笔记本主板里是没有的。。所以至今还是个无解的难题。 一下转载某人博客里的文章希望大家能深刻理解。。。 全面解析4GB内存无法识别问题 因为内存价格的持续走低,目前各大内存厂商相继推出了单条2GB的DDR2 800内存,这些内存给人最大的感觉就是价格便宜量又足。很多用户就直接买了两条2GB的内存,想组成双通道使用。可拿回家一看,原本4GB的内存容量被识别出来的只有3.2GB左右。通过检查,发现内存本身并没有问题。那又是什么吞食了你的内存呢?这就是我们本期将要给大家说清楚的一个问题。 800MB内存被吞食了 大家或许会发现一种很奇怪的现象,在我们的Windows XP和Vista中,安装4GB内存后,显示出来的只有3.2GB左右甚至更少,有800多MB的内存“无缘无故”地消失了,这让人感觉十分费解,主板和操作系统之所以不能使用全部的4GB内存,问题的根源就在于计算机那32位X86架构。32位X86架构是指个人电脑的地址总线是32位的,CPU、内存控制器、操作系统都是按32位地址总线设计。32位地址总线可以支持的内存地址代码是4096MB,也就是有4GB的地址代码,可以编4GB个地址。这4GB个地址码正好可以分配给4GB内存。但是,这4GB个地址码不能全部分配给安装在主板上的物理内存。因为个人电脑还有很多设备需要地址代码,以便CPU可以根据地址码找到它们,同时CPU和这些设备交换数据需要暂时存放数据的存储器——寄存器,这些寄存器也需要地址代码。比如硬盘控制器、软驱控制器、管理插在PCI槽上的PCI卡的PCI总线控制器,PCI-E总线控制器和PCI-E显卡,它们都有寄存器都需要系统分配给它们地址代码。这些地址由系统分配,电脑用户在使用中感觉不到。这样一来,当我们为电脑插上总容量为4GB的内存时,就有一部分内存分配不到地址代码而不能使用。 要深入了解4GB内存之谜,我们就得弄清楚各部件与4GB内存关系,其中涉及到的部件有CPU、内存控制器(Intel平台集成在北桥,AMD平台集成在CPU)和操作系统。CPU、内存控制器、BIOS:能支持4GB CPU能支持4GB内存 从386时代开始,CPU的地址总线就是32位的,可以访问4GB的地址代码。从奔腾Ⅱ到奔腾Ⅳ,理论上已经可以访问64GB的地址编码。后来支持64位架构的奔腾Ⅳ到现在的酷睿2,地址总线已经升级到64位,64位地址总线可以访问千亿GB的地址编码。实际上用不到这么多的地址总线,一般用42位足够了,可以编码的地址量有4TB。兼容64位架构的CPU 用在32位系统时地址总线就缩小为36位。所以现在的CPU支持4GB内存是没有问题的。

C函数的内存分配机制

C++函数的内存分配机制(转) 2010-08-24 16:03 1.同一个类的对象 共享同一个成员函数的地址空间,而每个对象有独立的成员变量地址空间,可以说成员函数是类拥有的,成员变量是对象拥有的 2.非虚函数 对于非虚函数的调用,编译器只根据数据类型翻译函数地址,判断调用的合法性,由1可知,这些非虚函数的地址与其对象的内存地址无关(只与该类的成员函数的地址空间相关),故对于一个父类的对象指针,调用非虚函数,不管是给他赋父类对象的指针还是子类对象的指针,他只会调用父类中的函数(只与数据类型(此为类类型)相关,与对象无关)。 3.虚函数 虚拟函数的地址翻译取决于对象的内存地址,而不取决于数据类型(编译器对函数调用的合法性检查取决于数据类型)。如果类定义了虚函数,该类及其派生类就要生成一张虚拟函数表,即vtable。而在类的对象地址空间中存储一个该虚表的入口,占4个字节,这个入口地址是在构造对象时由编译器写入的。所以,由于对象的内存空间包含了虚表入口,编译器能够由这个入口找到恰当的虚函数,这个函数的地址不再由数据类型决定了。故对于一个父类的对象指针,调用虚拟函数,如果给他赋父类对象的指针,那么他就调用父类中的函数,如果给他赋子类对象的指针,他就调用子类中的函数(取决于对象的内存地址)。 虚函数需要注意的大概就是这些个地方了,之前在More effective C++上好像也有见过,不过这次在Visual C++权威剖析这本书中有了更直白的认识,这本书名字很牛逼,看看内容也就那么回事,感觉名不副实,不过说起来也是有其独到之处的,否则也没必要出这种书了。4.如果类包含虚拟成员函数,则将此类的析构函数也定义为虚拟函数 因为派生类对象往往由基类的指针引用,如果使用new操作符在堆中构造派生类对象,并将其地址赋给基类指针,那么最后要使用delete操作符删除这个基类指针(释放对象占用的堆栈)。这时如果析构函数不是虚拟的,派生类的析构函数不会被调用,会产生内存泄露。 5.纯虚拟函数 纯虚拟函数没有函数体,专为派生类提供重载的形式。只要形象的将虚拟函数赋值为0,即定义了纯虚函数,例如void virtual XXXX(char* XXX) = 0; 定义了纯虚函数的类称为抽象基类。抽象基类节省了内存空间,但不能用来实例化对象。其派生类必须重载所有的纯虚函数,否则产生编译错误。 抽象基类虽然不能实例化,为派生类提供一个框架。抽象基类为了派生类提供了虚拟函数的重载形式,可以用抽象类的指针引用派生类的对象,这为虚拟函数的应用准备了必要条件。 C/C++中malloc和new区别 2009-05-13 15:56:32 阅读(1132) 发表评论 1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

内存条故障现象

内存条故障现象 篇一:内存的常见故障现象 内存的常见故障现象: 1、开机点不亮,并且伴随报警声音,一般是有节奏 的间断响声或者长响不断。内存报警 2、一客户在升级电脑内存后,电脑点不亮,重新拔 插后偶尔能点亮,进入系统,程序经常出错,蓝屏。 分析:因为是在新添了一条内存,电脑才出现的故障,所以“内存”是最大怀疑对象。拔掉新加的内存后故障消失。这是典型的内存“兼容”故障。 3、一台电脑买下一年后,一天开机发现进入不到系 统,但是可以点亮。在第一屏第二屏上看到有乱码的现象。进入bios后也有乱码现象。 分析:先判断一下此故障是硬件故障还是软件故障。(维修电脑基本步骤,首先判断是软件故障还是硬件故障再动手) 因为没进系统故障就出来,所以此故障极有可能是硬件引起的。打开机箱清洁灰尘,重点对内存进行清洁和内存插槽清洁后,重新开机故障消失! 4、有客户报单说电脑系统不正常,在对客户的电脑 重新安装系统的时候,第一次没有安装成功,中间有错误提示,换了一张系统盘后系统安装完

成。进入系统后,发现压缩文件在解压时出错,网上下载的软件安装过程中有时候也出错,IE浏览器也经常报错 分析:系统重新安装了,那么基本排除了病毒引起的软件故障。再考虑大量的程序运行出错和在安装系统时,第一次系统安装失败,所以考虑内存可能出现故障。因为内存有故障有引起系统安装失败的现象。综合考虑“内存”极有可能有质量问题。 解决:对内存清洁和重新拔插后故障依旧;更换内存后故障消失! 注:在电脑所有硬件故障里,内存的故障率几乎达到80%,并且内存故障会引起无法安装系统!切记!总结:内存故障类型 一、接触不良:内存各种类型故障里排名第一, 电脑硬件故障里也名列前茅,其现象:电脑点 不亮、内存报警声、程序经常出错、蓝屏、重 启等 解决:对内存的金手指清洁。用橡皮擦几遍,消除上面的氧化层。有必要的时候对主板的内存插槽也清洁一下,方法是用钢尺或者其他类似物对插槽刮几下,一个是清楚插槽内的污垢或者橡皮屑;一个是对插槽内部的弹簧片摩擦去除氧化层。 二、内存的兼容故障 兼容故障现在比以前少多了。兼容性故障并不是内存有故障,而是多条内存是不同的品牌、频率、时序等这些原因造成的互相冲突引起的故障。这是内存之间的兼容故障;另一个内存兼容故障是内存和

内存条里能存东西吗

内存条里能存东西吗 内存条是什么: 不能,以下是内存条的简介 内存条是cpu可通过总线寻址,并进行读写操作的电脑部件。内存条在个人电脑历史上曾经是主内存的扩展。随着电脑软、硬件技术不断更新的要求,内存条已成为读写内存的整体。我们通常所说电脑内存(ram)的大小,即是指内存条的总容量。 写入ram(即读写内存,即内存条)中的数据将在断电后彻底消失,电脑开机时cpu最早读入执行的程序数据来自rom(只读内存)。内存是电脑(包括单片机在内)的基础部件,从有电脑那天起就有了内存。而外存属于电脑外围设备,硬盘是经过磁带、软盘阶段之后发展产生的外存。 内存条是电脑必不可少的组成部分,cpu可通过数据总线对内存寻址。历史上的电脑主板上有主内存,内存条是主内存的扩展。以后的电脑主板上没有主内存,cpu完全依赖内存条。所有外存上的内容必须通过内存才能发挥作用。 内存的作用 内存条内存是电脑(pc机、单片机)必不可少的组成部分。与可有可无的外存不同,内存是以总线方式进行读写操作的部件;内存决非仅仅是起数据仓库的作用。除少量操作系统中必不可少的程序长驻内存外,我们平常使用的程序,如windows、linux等系

统软件,包括打字软件、游戏软件等在内的应用软件,虽然把包括程序代码在内的大量数据都放在磁带、磁盘、光盘、移动盘等外存设备上,但外存中任何数据只有调入内存中才能真正使用。电脑上任何一种输入(来自外存、键盘、鼠标、麦克风、扫描仪,等等)和任何一种输出(显示、打印、音像、写入外存,等等)无一不是通过内存才可以进行。 内存的分类 ddr内存条内存分为dram和rom两种,前者又叫动态随机存储器,它的一个主要特征是断电后数据会丢失,我们平时说的内存就是指这一种;后者又叫只读存储器,我们平时开机首先启动的是存于主板上rom中的bios程序,然后再由它去调用硬盘中的windows,rom的一个主要特征是断电后数据不会丢失。根据内存条上的引脚多少,我们可以把内存条分为30线、72线、168线等几种。30线与72线的内存条又称为单列存储器模块simm,(simm 就是一种两侧金手指都提供相同信号的内存结构,)168线的内存条又称为双列存储器模块dimm。30线内存条已经没有了;前两年的流行品种是72线的内存条,其容量一般有4兆、8兆、16兆和32兆等几种;市场的主流品种是168线内存条,168线内存条的容量一般有16兆、32兆、64兆、128兆等几种,一般的电脑插一条就ok了,不过,只有基于vx、tx、bx芯片组的主板才支持168线的内存条。 ram有些像教室里的黑板,上课时老师不断地往黑板上面写东西,下课以后全部擦除。ram要求每时每刻都不断地供电,否则数据会丢失。如果在关闭电源以后ram中的数据也不丢失就好了,

C语言的内存分配

在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。 第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请/释放内存空间及其注意事项。 3.1 内存管理基本概念 3.1.1C程序内存分配 1.C程序结构 下面列出C语言可执行程序的基本情况(Linux 2.6环境/GCC4.0)。 可以看出,此可执行程序在存储时(没有调入到内存)分为代码区(text)、数据区(data)和未初始化数据区(bss)3个部分。 (1)代码区(text segment)。存放CPU执行的机器指令(machine instructions)。通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。 (2)全局初始化数据区/静态数据区(initialized data segment/data segment)。该区包含了在程序中明确被初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。例如,一个不在任何函数内的声明(全局数据): 使得变量maxcount根据其初始值被存储到初始化数据区中。

这声明了一个静态数据,如果是在任何函数体外声明,则表示其为一个全局静态变量,如果在函数体内(局部),则表示其为一个局部静态变量。另外,如果在函数名前加上static,则表示此函数只能在当前文件中被调用。 (3)未初始化数据区。亦称BSS区(uninitialized data segment),存入的是全局未初始化变量。BSS这个叫法是根据一个早期的汇编运算符而来,这个汇编运算符标志着一个块的开始。BSS区的数据在程序开始执行之前被内核初始化为0或者空指针(NULL)。例如一个不在任何函数内的声明: 将变量sum存储到未初始化数据区。 图3-1所示为可执行代码存储时结构和运行时结构的对照图。一个正在运行着的C编译程序占用的内存分为代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。 (1)代码区(text segment)。代码区指令根据程序设计流程依次执行,对于顺序指令,则只会执行一次(每个进程),如果反复,则需要使用跳转指令,如果进行递归,则需要借助栈来实现。 代码区的指令中包括操作码和要操作的对象(或对象地址引用)。如果是立即数(即具体的数值,如5),将直接包含在代码中;如果是局部数据,将在栈区分配空间,然后引用该数据地址;如果是BSS区和数据区,在代码中同样将引用该数据地址。 (2)全局初始化数据区/静态数据区(Data Segment)。只初始化一次。 (3)未初始化数据区(BSS)。在运行时改变其值。

内存条分类

内存外观区别 SDR: 两个缺口、单面84针脚、双面168针脚 DDR1: 一个缺口、单面92针脚、双面184针脚、左52右40、内存颗粒长方形 DDR2: 一个缺口、单面120针脚、双面240针脚、左64右56、内存颗粒正方形、电压1.8V DDR3: 一个缺口、单面120针脚、双面240针脚、左72右48、内存颗粒正方形、电压1.5V

安装好CPU后,接下来就要开始安装内存条了。在安装内存条之前,可以在主板说明书上查阅主板可支持的内存类型、可以安装内存的插槽数据、支持的最大容量等等。虽然这些都是很简单的,但是你知道不同内存条是如何区分的吗?你知道EDO RAM内存为什么必须成对才能使用吗?你知道RDRAM内存插槽的空余位置为何要插满终结器才能使用吗?这些都是安装内存条所必须了解的。如果你还不知道,那么这篇文章就非常适合你。 一、从外观上识别内存 从计算机诞生开始,内存型态的发展真可谓千变万化。因此,下面先着重介绍内存的种类及其外观,好让大家对它们进行分辨,这也是大家在装机过程中必须了解的。从内存型态上看,常见的内存有:FPM RAM、EDO RAM、SDRAM、DDR RAM、Rambus DRAM,如图1所示。从外观上看,它们之间的差别主要在于长度和引脚的数量,以及引脚上对应的缺口。

FPM RAM主要流行在286、386时代,当时使用的是30pin的FPM RAM内存,容量只有1MB或2MB。而在486时代,及少数586电脑也使用72pin的FPM RAM 内存。EDO RAM主要应用在486、586时代,也有72pin 和168pin之分。从外形上看,30pin的FPM RAM内存的长度最短,72pin的FPM RAM和EDO RAM内存的长度稍长一些,而168pin和EDO RAM内存与大家常见的SDRAM内存是基本一样的。这几种内存很容易就可以在长度和引脚的数量上区分开来。只不过这些内存 如今基本上已经销声匿迹了。

C++内存分配的五种方法

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。 常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法) 明确区分堆与栈 在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。

首先,我们举一个例子: void f() { int* p=new int[5]; } 这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小,然后调用o perator new分配内存,然后返回这块内存的首地址,放入栈中,他在VC6下的汇编代码如下: 00401028 push 14h 0040102A call operator new (00401060) 0040102F add esp,4 00401032 mov dword ptr [ebp-8],eax 00401035 mov eax,dword ptr [ebp-8] 00401038 mov dword ptr [ebp-4],eax 这里,我们为了简单并没有释放内存,那么该怎么去释放呢?是delete p么?澳,错了,应该是delete []p,这是为了告诉编译器:我删除的是一个数组,VC6就会根据相应的Cookie信息去进行释放内存的工作。 好了,我们回到我们的主题:堆和栈究竟有什么区别? 主要的区别由以下几点:

类和动态内存分配

第12章类和动态内存分配 12.1 动态内存和类 C++使用new和delete运算符来动态控制内存。遗憾的是,在类中使用这些运算符导致许多编程问题。在这种情况下,析构函数将是必不可少的。 12.1.1 复习实例和静态成员 注意点: ●使用char指针来表示姓名。意味着类声明本身没有为字符串分配存储空间,而是在构 造函数中使用new来为字符串分配空间。避免了在类声明中预先定义字符串的长度。 ●将num_strings成员声明为静态存储类。特点:无论创建了多少对象,程序只创建一个 静态变量副本。

注: Stringbad sailor = sports; 等价于Stringbad sailor = Stringbad(sports); Stringbad(constStringbad&); 当使用一个对象来初始化另外一个对象时,编译器将自动生成上述构造函数(复制构造函数即拷贝构造函数) 12.1.2 特殊成员函数C++提供了下面这些成员函数 ●默认构造函数(如果没有定义构造函数) ●默认析构函数 ●复制构造函数 ●赋值运算符 ●地址运算符 C++11移动构造函数与移动赋值运算符(第18章) 1 默认构造函数 Klunk::Klunk(){}不接受任何参数,也不执行任何操作。原因:创建对象时,总会调用构造函数。 Klunk::Klunk(){ klunk_ct = 0; } 不接受任何参数,但可以用来设定特定的值。

Klunk(int n = 10) {klunk_ct = 0;} 带参数的默认构造函数,只要所有的参数都有默认值。 2 复制构造函数 复制构造函数用于将一个对象复制到新创建的对象中。用于初始化过程中(包括按值传递参数)。类的复制构造函数原型如下: Class_name(constClass_name&); Stringbad(constStringbad&); 何时调用复制构造函数?(每当程序生成对象副本的时候,复制构造函数将被调用)新建一个对象并将其初始化为同类现有对象时,复制构造函数将被调用。下面四种情况均会调用复制构造函数。 Stringbad ditto(motto); Stringbadmetoo = motto; Stringbad also = Stringbad(motto); Stringbad* pStringbad = new Stringbad(motto);使用motto初始化一个匿名对象,并将新对象的地址赋值给pStringbad指针。 默认的复制构造函数有什么功能? 默认的复制构造函数租个复制非静态的成员(成员复制称为浅复制),复制的是成员的值。

内存条的分类和区别

内存条的分类和区别 内存条之间的种类的区别,本质上是速度不同,越新的内存种类速度越快。然后,为了保证不插错,物理插槽也有不同。 下图是DDR三代内存的外观上的不同的对比。 1、DDR1代,最高到533。 2、DDR2代,最高到1066。 3、DDR3代,最高到2400左右。 4、DDR4代,从2400开始起步。 内存主要看主频1代DDR266,DDR333,DDR400. 2代DDR533, DDR667,DDR800。 3代DDR1033,DDR1066,DDR1333等 内存条种类之间的区别 DDR2与DDR的区别与DDR相比,D DR2最主要的改进是在内存模块速度相同的情况下,可以提

供相当于DDR内存两倍的带宽。这主要是通过在每个设备上高效率使用两个DRAM核心来实现的。作为对比,在每个设备上DDR内存只能够使用一个DRAM核心。技术上讲,DDR2内存上仍然只有一个DRAM核心,但是它可以并行存取,在每次存取中处理4个数据而不是两个数据。与双倍速运行的数据缓冲相结合,DDR2内存实现了在每个时钟周期处理多达4bit的数据,比传统DDR内存可以处理的2bit数据高了一倍。DDR2内存另一个改进之处在于,它采用FBGA封装方式替代了传统的TSOP方式。然而,尽管DDR2内存采用的D RAM核心速度和DDR的一样,但是我们仍然要使用新主板才能搭配DDR2内存,因为DDR2的物理规格和DDR是不兼容的。首先是接口不一样,DDR2的针脚数量为240针,而DDR内存为184针;其次,DDR2内存的VDIMM电压为1.8V,也和DD R内存的2.5V不同。 DDR2的定义: DDR2(Double Data R ate 2) SDRAM是由JEDEC(电子设备工程联合委员会)进行开发的新生代内存技术标准,它与上一代DDR内存技术标准最大的不同就是,虽然同是采用了在时钟的上升/下降延同时进行数据传输的基本方式,但DDR2内存却拥有两倍于上一代DDR内存预读取能力(即:4bit数据读预取)。换句话说,DDR2内存每个时钟能够以4倍外部总线的速度读/写数据,并且能够以内部控制总线4倍的速度运行。此外,由于DDR2标准规定所有DDR2内存均采用FBGA封装形式,

Linux内核中常见内存分配函数

Linux内核中常见内存分配函数 1. 原理说明Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型, 对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了 四级页表,如图2-1所示。四级页表分别为:页全局目录(Page Global 页上级目录页中间目录(Page Middle 页表(Page Table) 页全局目录包含若干页上级目录的地址, 页上级目录又依次包含若干页中间目录的地址,而页中间目录又包含若 干页表的地址,每一个页表项指向一个页框。Linux中采用4KB大小的页 框作为标准的内存分配单元。多级分页目录结构 1.1. 伙伴系统 算法在实际应用中,经常需要分配一组连续的页框,而频繁地申请 和释放不同大小的连续页框,必然导致在已分配页框的内存块中分散了 许多小块的空闲页框。这样,即使这些页框是空闲的,其他需要分配连 续页框的应用也很难得到满足。为了避免出现这种情况,Linux内核中 引入了伙伴系统算法(buddy system)。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应 4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小 的整数倍。 假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,就去512个页框的链表中找,找到了则将页框块分为2个256个页框的块,一个分配给

应用,另外一个移到256个页框的链表中。如果512个页框的链表中仍没有空闲块,继续向1024个页框的链表查找,如果仍然没有,则返回错误。页框块在释放时,会主动将两个连续的页框块合并为一个较大的页框块。 1.2. slab分配器slab分配器源于 Solaris 2.4 的分配算法,工作于物理内存页框分配器之上,管理特定大小对象的缓存,进行快速而高效的内存分配。slab分配器为每种使用的内核对象建立单独的缓冲区。Linux 内核已经采用了伙伴系统管理物理内存页框,因此slab分配器直接工作于伙伴系统之上。每种缓冲区由多个slab 组成,每个slab就是一组连续的物理内存页框,被划分成了固定数目的对象。根据对象大小的不同,缺省情况下一个 slab 最多可以由 1024个页框构成。出于对齐等其它方面的要求,slab 中分配给对象的内存可能大于用户要求的对象实际大小,这会造成一定的内存浪费。 2. 常用内存分配函数 2.1. __get_free_pages unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) __get_free_pages函数是最原始的

内存条详细讲解

内存条详细讲解 内存条是连接CPU 和其他设备的通道!起到缓冲和数据交换作用!!!! 内存的作用与分类 内存是电脑中的主要部件,它是相对于外存而言的。我们平常使用的程序,如WindowsXP系统、打字软件、游戏软件等,一般都是安装在硬盘等外存上的,但仅此是不能使用其功能的,必须把它们调入内存中运行,才能真正使用其功能,我们平时输入一段文字,或玩一个游戏,其实都是在内存中进行的。通常我们把要永久保存的、大量的数据存储在外存上,而把一些临时的或少量的数据和程序放在内存上。 内存分为DRAM和ROM两种,前者又叫动态随机存储器,它的一个主要特征是断电后数据会丢失,我们平时说的内存就是指这一种;后者又叫只读存储器,我们平时开机首先启动的是存于主板上ROM中的BIOS程序,然后再由它去调用硬盘中的Windows,ROM的一个主要特征是断电后数据不会丢失。 根据内存条上的引脚多少,我们可以把内存条分为30线、72线、168线等几种。30线与72线的内存条又称为单列存储器模块SIMM,168线的内存条又称为双列存储器模块DIMM。目前30线内存条已经没有了;前两年的流行品种是72线的内存条,其容量一般有4兆、8兆、16兆和32兆等几种;目前市场的主流品种是168线内存条,168线内存条的容量一般有16兆、32兆、64兆、128兆等几种,一般的电脑插一条就OK了,不过,只有基于VX、TX、BX芯片组的主板才支持168线的内存条。 内存发展简史 起初,电脑所使用的内存是一块块的IC,我们必须把它们焊接到主机板上才能正常使用,一旦某一块内存IC坏了,必须焊下来才能更换,这实在是太费劲了。后来,电脑设计人员发明了模块化的条装内存,每一条上集成了多块内存IC,相应地,在主板上设计了内存插槽,这样,内存条就可随意拆卸了,从此,内存的维修和扩充都变得非常方便。 根据内存条上的引脚多少,我们可以把内存条分为30线、72线、168线等几种。30线与72线的内存条又称为单列存储器模块SIMM,168线的内存条又称为双列存储器模块DIMM。目前30线内存条已经没有了;前两年的流行品种是72线的内存条,其容量一般有4兆、8兆、16兆和32兆等几种;目前市场的主流品种是168线内存条,168线内存条的容量一般有16兆、32兆、64兆、128兆等几种,一般的电脑插一条就OK了,不过,只有基于VX、TX、BX芯片组的主板才支持168线的内存条。现如今,最流行的应属184线的内存条了。 内存的性能指标 评价内存条的性能指标一共有四个: (1) 存储容量:即一根内存条可以容纳的二进制信息量,如目前常用的168线内存条的存储容量一般多为32兆、64兆和128兆。而DDRII3普遍为1GB到2GB。 (2) 存取速度(存储周期):即两次独立的存取操作之间所需的最短时间,又称为存储周期,半导体存储器的存取周期一般为60纳秒至100纳秒。 (3) 存储器的可靠性:存储器的可靠性用平均故障间隔时间来衡量,可以理解为两次故障之间 的平均时间间隔。 (4) 性能价格比:性能主要包括存储器容量、存储周期和可靠性三项内容,性能价格比是

相关文档