精华内容
下载资源
问答
  • 问题:“当我们按下电源开关时,电源开始供电,芯片组撤去RESET信号,CPU马上就从地址FFFF0H处开始执行...我想知道这个地址(FFFF0H)是内存的地址 还是主板BIOS地址? 我自己是这样想的: 1、系统硬件(系统bios、显卡
     
    

    问题:“当我们按下电源开关时,电源开始供电,芯片组撤去RESET信号,CPU马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。”

    我想知道这个地址(FFFF0H)是内存的地址 还是主板BIOS地址?
    我自己是这样想的:
    1、系统硬件(系统bios、显卡bios、内存.....)的编址是把他们放在一起统一分配地址(即一个占用一段)?
    2、还是 只给内存编址了 而其他硬件在内存地址中相应占据一段范围?
    还是其他方式 ?这些地址是怎么个关系?

    还有 如果不插内存 或是内存坏了 还能找到上边的那个地址吗?


    回答:

    0~640KB 基本内存
    640KB~1MB 上位内存(这个区域的地址分配给ROM,相应的384KB的RAM被屏蔽掉。所谓的影子内存技术,就是把ROM内容读取到对应地址的RAM中,以后系统就从RAM中读取数据,而不是从原来的ROM读取数据,从而提高速度。)
    1MB~ 扩展内存

    注:

    Shadow RAM也称为"影子内存",是为了提高计算机系统效率而采用的一种专门技术,所使用的物理芯片仍然是CMOS DRAM(动态随机存取存储器,参阅本书后面的内容)芯片。Shadow RAM占据了系统主存的一部分地址空间。其编址范围为C0000~FFFFF,即为1MB主存中的768KB~1024KB区域。这个区域通常也称为内存保留区,用户程序不能直接访问。Shadow RAM的功能就是是用来存放各种ROM BIOS的内容。也就是复制的ROM BIOS内容,因而又它称为ROM Shadow,这与Shadow RAM的意思一样,指得是ROM BIOS的"影子"。现在的计算机系统,只要一加电开机,BIOS信息就会被装载到Shadow RAM中的指定区域里。由于Shadow RAM的物理编址与对应的ROM相同,所以当需要访问BIOS时,只需访问Shadow RAM而不必再访问ROM,这就能大大加快计算机系统的运算时间。通常访问ROM的时间在200ns左右,访问DRAM的时间小于100ns、60ns,甚至更短。

    在计算机系统运行期间,读取BIOS中的数据或调用BIOS中的程序模块的操作将是相当频繁的,采用了Shadow RAM技术后,无疑大大提高了工作效率。

    386之前与386之后,这个地址是不同的,但都在系统内存的最高 地址段。在386下为 FFFFFFF0H。因为CS段是16位的,EIP是32位的,为了得到一个32位地址,386给CS段增加了几个字段,这是隐藏的字段,系统可以通过GDT、IDTrong:全局描述符表、中断描述符表)将更改段选择子的字段,此时地址转换就不是 段地址左移4位 + 偏移地址,而是CS的Base字段+偏移地址。

    下面是一个例子:

    当系统加电后,系统会复位。此时在386以前的系统下CS=F000H,IP=FFF0H,Bios地址为段地址左移4位 + 偏移地址挤即 F0000H + FFF0H = FFFF0H。
    在386以前系统可寻址范围为1MB,即 00000H~FFFFFH。
    在386下CS=F000H,IP=FFF0H,这是不变的,但是这时,CS中的内容为:
    Selector = F000H (这个就是你可以看到的那部分内容)。
    这时隐藏的部分注1)是不能用的,因为在实地址模式下,所以Bios地址与386以前的地址一样,但是386可寻址范围为4GB 即 00000000H~FFFFFFFFH,如果以这个地址000
    FFFF0H)作为Bios地址的话,系统内存不连续,因此,386使用硬件置1的方式将A20~A31地址线置1,就变成FFFFFFF0H,并以此作为Bios地址。

    这个置1的结果是,隐藏的部分的一个字段Base=FFFF0000Hrong:F000H左移4位F0000H,然后A20~A31置1。),这个操作不是由更改描述符表实现的,因为还没有进入保护模式,而且描述符表还没有建立。这是硬件实现的,而且当进行一次段间跳转后,由于置1的结果就不能保存,因为硬件设计是从会将其置0,所以当执行完FFFFFFF0H处的指令 jmp ,Base=00000000H,这时,Bios就使用1M以下内存。


    注1

    ============================

    段寄存器分为可见部分与不可见部分:可见部分就是那个16位的寄存器,而不可见部分包括基址、限长、属性等关键字段。
    跨段寻址是根据段寄存器的不可见部分计算的。

    实模式下:
    给一个段寄存器赋值时,
    对于不可见部分的基址字段,设为那个16位段地址左移4位的值。
    对于不可见部分的限长字段,设为FFFF。
    对于不可见部分的属性字段,根据寄存器的不同(CS/SS/DS/ES/FS/GS)设置不同的属性。
    保护模式下:
    给一个段寄存器赋值时,用该选择子对应的描述符给于不可见部分赋值

    这样做的好处:
    寻址部件不需要考虑实模式/保护模式区别,直接可以从不可见部分得到关键数据,同时还可以提高效率。
    在CPU复位时,它是直接初始化段寄存器的不可见部分的。

    展开全文
  • 内存和工作内存什么

    千次阅读 2021-06-07 22:52:15
    内存可以类比成物理硬件的主内存,但此处仅是虚拟机内存的部分 每条线程还有自己的工作内存(Working Memory)。 工作内存可以类比成处理器高速缓存 线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝...

    前言

    本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

    本专栏目录结构和参考文献请见100个问题搞定Java虚拟机

    正文

    Java内存模型规定了所有的变量都存储在主内存(Main Memory)中。

    主内存可以类比成物理硬件的主内存,但此处仅是虚拟机内存的部分

    每条线程还有自己的工作内存(Working Memory)。

    工作内存可以类比成处理器高速缓存

    线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝, 线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。

    不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。

    可以结合 volatile 的实现原理是什么? 来理解主内存和工作内存

    展开全文
  • 内存泄漏是什么

    千次阅读 2019-01-12 16:32:08
    1. 什么内存泄漏(memory leak)?  因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,...

    参看资料:https://www.cnblogs.com/mfrbuaa/p/3851742.html


    1. 什么是内存泄漏(memory leak)?
           指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 

    A memory leak is a particular type of unintentional memory consumption by a computer program where the program fails to release memory when no longer needed. This condition is normally the result of a bug in a program that prevents it from freeing up memory that it no longer needs.This term has the potential to be confusing, since memory is not physically lost from the computer. Rather, memory is allocated to a program, and that program subsequently loses the ability to access it due to program logic flaws. 

    2. 对于C和C++这样的没有Garbage Collection 的语言来讲,我们主要关注两种类型的内存泄漏:堆内存泄漏(Heap leak)。对       内存指的是程序执行中依据须要分配通过malloc,realloc new等从堆中分配的一块内存,再是完毕后必须通过调用相应的 free或者delete 删掉。假设程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak. 

           系统资源泄露(Resource Leak).主要指程序使用系统分配的资源比方 Bitmap,handle ,SOCKET等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。  

    3. 怎样解决内存泄露?

           内存泄露的问题其困难在于1.编译器不能发现这些问题。2.执行时才干捕获到这些错误,这些错误没有明显的症状,时隐时现。              

    4.对于手机等终端开发用户来说,尤为困难。以下从三个方面来解决内存泄露:

           第一,良好的编码习惯,尽量在涉及内存的程序段,检測出内存泄露。当程式稳定之后,在来检測内存泄露时,无疑添加了排除的困难和复杂度。

           使用了内存分配的函数,要记得要使用其想用的函数释放掉,一旦使用完成。

           Heap memory:

                  malloc\realloc ------  free

                  new \new[] ----------  delete \delete[]

                  GlobalAlloc------------GlobalFree 

           要特别注意数组对象的内存泄漏

                  MyPointEX *pointArray =new MyPointEX [100];

           其删除形式为:

                  delete []pointArray 

           Resource Leak :对于系统资源使用之前要细致看起用法,防止错误使用或者忘记释放掉系统资源。

     

     

     

    展开全文
  • 缓存是可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速度很快缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部...

    缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速度很快
    缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。

      硬盘的缓存主要起三种作用:一是预读取。当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的;二是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地;第三个作用就是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输


    计算机业界,内存这个名词被广泛用来称呼 RAM( 随机存取内存 ) 计算机使用随机存取内存来储存执行作业所须的暂时指令以及数据以使计算机的 CPU( 中央处理器 ) 能够更快速读取储存在内存的指令及数据。
    例来说,当处理器加载一个应用程序 - 例如文字处理或页面编辑程序 - 到内存使应用程序能以最快速及最高效率的方式执行。以实用价值而言,将程序加载内存能够确保计算机能以更短的时间来执行作业而使工作能够更迅速地完成
    内存与储存的差别

    大多数人常将内存 (Memory) 与储存空间 (Storage) 两个名字混为一谈 , 尤其是在谈到两者的容量的时候 内存是指 (Memory) 计算机中所安装的随机存取内存的容量而储存 (Storage) 是指计算机内硬盘的容量 为了避免混淆 , 我们将计算机比喻为一个有办公桌与档案柜的办公室。想象一下这个办公桌与档案柜的比喻。想象每次想要阅读一份文件或数据夹都必须从档案柜中找寻的情形,这会大幅减低工作执行的速度 , 更别说会把人逼疯了。如果有足够的办公桌空间 ( 如内存 ), 便能够将所需要的档摊开 , 并能立即一眼就能找出所需的信息。

    另一个内存与储存最重要的差别在于 : 储存于硬盘中的信息在关机后能够保持完整,但任何储存在内存中的数据在计算机关机后便会全部流失。就像在办公室的比喻中 , 任何在下班时间后被遗留在桌上的档或档案都会全部被丢弃一样
    增加计算机系统中的内存能够增加计算机的效能表现是众所皆知的。如果内存没有足够的空间 , 计算机就必须建立一个虚拟内存档案。在这个过程中 , 中央处理器在硬盘中保留一个空间来代替额外的随机存取内存 这个称为 ” Swapping” 的程序减低系统的速度 一般的计算机从内存存取大约需要 200ns( 奈秒 ), 但从硬盘存取则需要 12,000,000ns 具体来说就等于花四个半月的时间来完成三分半中就能完成的工作 !
    闪存存储器是保留实力,即使其内容删除.

    Flash memory is a form of EAPROM (Electrically Alterable Programmable Read-Only Memory).闪存是一种eaprom(可变电可编程只读存储器).

    Each bit of data in a flash memory device is stored in a transistor called a floating gate.每一个比特的数据储存在快闪记忆装置称为浮栅晶体管. The floating gate can only be accessed though another transistor, the control gate.浮动门虽然只能进入另一个晶体管,控制闸门.

    The process the control gate uses to access the floating gate is a field emission phenomenon known as Fowler-Nordheim tunneling.利用过程控制闸门进入浮栅是场发射现象称为Fowler-Nordheim隧. Tunneling allows voltage to flow from the control gate to the floating gate through the dielectric layer of oxide which separates them.允许从隧道流电压控制的浮动栅栅绝缘层氧化物通过分隔他们.

    展开全文
  • jemalloc 内存分配器 是什么

    万次阅读 2021-08-04 13:39:40
    jemalloc 内存分配器 是什么? 内存池 所谓内存池,是应用程序向操作系统(或 JVM)申请一块内存,自己管理这一块内存,对象的创建和销毁都从这块内存中分配和回收,这么一块内存就可以称作内存池, 对应地,管理...
  • 最近朋友推荐了一篇关于内存溢出与内存泄漏的文章,感觉写的还不错,于是便在网上搜索了一番,对这块进行了加固,发现自己之前写的代码也存在一些...首先简单的介绍一下什么内存溢出与内存泄漏内存溢出 out of memory
  • 什么内存泄漏?有什么危害

    千次阅读 多人点赞 2019-04-18 11:31:56
    1、什么内存泄漏 内存泄漏是你向系统申请分配内存进行使用(new/malloc),然后系统在堆内存中给这个对象申请一块内存空间,但当我们使用完了却没有归系统(delete),导致这个不使用的对象一直占据内存单元,...
  • 内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。...对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应...
  • 什么内存BANK

    千次阅读 2016-03-18 10:29:09
    其实这种观念是不对的,内存的Bank(物理Bank)数和内存颗粒的面无关,它们之间有什么联系呢? 要讲清这个问题,就要提到内存的逻辑Bank,下面就给大家介绍一下物理Bank和逻辑Bank的概念。在介绍之前
  • 普通内存、ECC内存和REG ECC内存什么不同? 前言 我们都知道,在INTEL平台,北桥负责与CPU的联系,并控制内存、AGP、PCI数据在北桥内部传输。基本上只要主板芯片组确定,那么其支持的内存类型也就确定了。 ...
  • 什么是虚拟内存

    千次阅读 多人点赞 2019-11-09 15:33:02
    什么是虚拟内存呢?先查一下维基百科: 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时...
  • 内存溢出与内存泄漏

    千次阅读 2016-03-17 15:27:21
    内存泄漏(memory leak)由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,是应用程序分配某段内存后,由于程序设计错误而导致JVM失去了对该段内存的控制,因而造成了内存的浪费。一般内存泄漏是内存...
  • 什么内存溢出,内存泄露?他们的区别是什么? 内存溢出 out of memory:是程序在申请内存时,没有足够的内存空间供其使用,出现out of memory; 内存泄露 memory leak:是程序在申请内存后,无法释放已申请的内存...
  • Java内存泄漏与内存溢出详解

    千次阅读 2017-02-04 21:08:08
    内存泄漏你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态。 内存溢出你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出。
  • 定义 内存泄露(memory lock)是由于疏忽或错误... 一般常说的内存泄露是内存的泄露,堆是动态分配内存的,并且可以分配使用很大的内存,使用不好会产生内存泄露,使用不好会产生内存泄露。频繁的使用mallo...
  • 我用一个指针(int *p)指向一个变量(int a[10]);当a的生命周期结束时,a的空间是否会被释放掉。...假如有指针函数,尽管指向的对象(函数内部对象)生命周期已经结束,为什么指针指向的区域没有被释放掉?
  • 全面理解Java内存模型

    万次阅读 多人点赞 2016-09-21 18:39:21
    Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存...
  • 内存泄漏是分配出去的内存无法回收了内存泄漏由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。一般我们常说...
  • 通常所说的内存容量即指内存条DRAM的大小。 高速缓冲存储器Cache主要是为了解决CPU和主存速度不匹配而设计的。Cache一般由SRAM(静态随机存储器)芯片实现,它的存取速度接近CPU,快于DRAM,存储容量小于DRAM。...
  • 每日一面 - JVM 内存一般包括什么

    万次阅读 2021-01-12 07:54:39
    我们一般通过两个工具 pmap 还有 jcmd 中的 VM.native_memory 命令去查看 Java 进程内存占用,由于 pmap 命令有点复杂而且很多内存映射是 anon 的,这里采用 jcmd 中的 VM.native_memory 命令,去看一下 JVM 内存的...
  • python 内存泄漏与内存溢出

    千次阅读 2018-12-07 09:17:07
    ***内存泄漏:***你使用malloc或new向 内存申请了一块内存空间,但没有用free以及delete对该块内存进行...内存泄漏并非内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因...
  • 内存溢出,内存泄漏,内存抖动

    千次阅读 2018-11-19 11:17:57
    内存溢出,内存泄漏,内存抖动你都碰到过吗?怎么解决的?如何区分这几种情况?...内存溢出 out of memory,是程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个inte...
  • 内存泄漏:由于疏忽或者错误造成程序未能释放已经不再使用的情况,内存泄漏并不是内存在物理上的错误消失,而是程序分配某段内存后,由于设计错误,丢失了对这段内存的控制,因而造成了内存浪费。 如何进行内存...
  • JAVA内存管理之堆内存和栈内存

    千次阅读 2013-06-18 19:11:31
    其中栈内存指的是虚拟机栈,堆内存指的是java堆。 1.栈内存,即虚拟机栈。每个方法被执行的时候都会同时创建一个栈帧,用来存储局部变量,操作栈,动态链接,方法出口等信息。局部变量包括各种基本类型的变量和对象...
  • 参考回答: 内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存情况。...对内存指的是程序运行中根据需要分配通过malloc,realloc new等从 堆中分配的一块内存,再是完成后...
  • 由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非内存在物理上的 消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪 费。导致程序运行速度...
  • 内存泄漏和内存溢出

    万次阅读 多人点赞 2018-08-22 15:28:58
    内存泄漏:(Memory Leak)是程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果   内存泄露 memory leak,是程序在申请内存后,...
  • ThreadLocal为什么会导致内存溢出

    万次阅读 2020-08-04 16:10:18
    ThreadLocal为什么会导致内存溢出

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,053,292
精华内容 421,316
关键字:

内存指什么