精华内容
下载资源
问答
  • 内存单元和内存单元地址

    千次阅读 2013-10-28 15:01:19
    内存单元地址  我们每个人,在不断的成长,无论何时,都在不断的学习着,通过书本,通过师傅,通过失败,我们不断的总结着,不断的整理着自己的知识,使其系统化,理论化,以便能解决更多复杂的问题。但是具有这样...
    内存单元地址
           我们每个人,在不断的成长,无论何时,都在不断的学习着,通过书本,通过师傅,通过失败,我们不断的总结着,不断的整理着自己的知识,使其系统化,理论化,以便能解决更多复杂的问题。但是具有这样条理清晰,结构完整的学识,我们经过了若干年,学习了若干代人的经验,经过了若干次的实践,一切的一切都是那么来之不易。从最初的一点点皮毛接触(感性认识),到完备知识体系的建立(理性认识),我们再把这些知识传授给其他人,哪里是一天两天可以教会他们的呀。指针是C语言博大精深之处,认识它,其实是在进军操作系统核心部分;指针是C之所以被称为中级语言的重要原因之一,它继承了汇编语言的内存单元的直接和间接访问的手段,使我们用高级语言编写的程序的效率大幅提高。指针的用途和优点是多多的,但是指针对不熟悉系统工作原理,尤其是对存储器原理不清楚的人,是不容易掌握的,因此我们对指针的讲解从内存的工作原理讲起。 

           在我们的计算机中,主要的内存叫做RAM(Random Access Memory),即随机存取存储器,在计算机的基础课中我们就了解到,RAM的主要作用是存储程序代码和数据供CPU在需要的时候调用。RAM对于系统性能的影响是每个PC用户都非常清楚的,那么它是如何实现程序和数据的存取的呢? 

           程序和数据的存取,并不是像堆放山药蛋那样简单,而是更像是超市存包处用箱格子存放物品一样,不但要放进去,还要能在需要的时候准确的取出来。 

    1 2 3 4 5 6 7 。。。。。。。。。。。。。。。。。。。。。。。。。。。9999 
    ▼▼▼▼▼▼▼                                                                                                                       ▼ 
    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 

           上面的示意图中的小园点代表RAM中的储物箱,每一个圆点是一个小箱,,每个小箱有一个唯一的编号。计算机术语把一个小箱子称为一个字节.RAM就是由许多字节组成的,如上图中小圆点组成的细线。这里每个字节的编号是数字的,编号从0开始,即第一个字节的编号是0,依次第2个字节的编号是1,其后是2,3,4,5,6.............直到最后一个字节,当整个内存共有100个字节,最后一个字节的编号就是99;而当我们的内存共有10000个字节时,最后一个字节的编号就是9999了。一般的,我们称这个编号为该字节的地址编号,简称地址。 

           上面的内容,貌似原理,你仔细看看,其实很简单的哩,你把CPU和RAM当作两个人,CPU是存取包裹的人,RAM是存包处的管理员!具体举例:设包裹名为50,箱格子的号是2000,如下: 

           如果CPU要想从RAM那里取(包),而且现在包被存在(箱号)为2000的(箱)中,这时CPU首先需要向RAM提供(箱号)即2000,以便RAM定位待取的(包)50,然后等待若干个时间单位之后,RAM就会根据(箱号)2000定位到(包)50,并把(包)50交给CPU。我们现实生活中的超市存包处,一个箱格子是只放一个包的,哈,于是取包的过程可以用下图表示: 

              地址 2000▼           RAM                                                           CPU 
    = = =.......= = = = = = = = = = = =........ = =                                     = = = = = = 
    ||                                                            ||      <←←<←←2000      ||             || 
    ||........................50................................||                                     ||             || 
    ||                                                            ||      50 >→→>→→ >      ||             || 
    = = =.......= = = = = = = = = = = =........ = =                                     = = = = = = 
           超市存包处被划分为许多格子,每个格为最小的单位,一个格存一个包,如果你一个人有3个包,那么就给你3个格子哦;我们把一个格子称为一个存包单元。 

           回到计算机中,如果CPU想要从RAM中调用的(数据),存放在(地址编号)为2000的(字节)中,这时CPU它首先需要向RAM提供(地址)即2000,以便RAM定位待存取的(数据)50,然后等待若干个时间单位之后,RAM就会根据(地址)2000定位到(数据)50,并把(数据)50交给CPU。 
           前面我们已经提到,作为内存的RAM是以字节为最小单位的,你的数据如果1个字节放不下,可以给你2个字节或更多嘛,如此而已。类似存包处把每个格子称为存包单元,我们把每个字节称为内存中数据存取的单元,简称为内存单元。每个内存单元的地址编号,简称为内存单元地址 
    展开全文
  • 在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址。先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存...
    在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址。

    先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存为内存交换区。

    那么,什么是虚拟内存地址和物理内存地址呢。假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址0~0xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?回答这个问题前,先说明计算机的内存分页机制。

    计算机会对虚拟内存地址空间(32位为4G)分页产生页(page),对物理内存地址空间(假设256M)分页产生页帧(page frame),这个页和页帧的大小是一样大的,所以呢,在这里,虚拟内存页的个数势必要大于物理内存页帧的个数。在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号到页帧号的映射,而且是一对一的映射。但是问题来了,虚拟内存页的个数 > 物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,让他失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页都有被调度的可能了。这就是处理虚拟内存地址到物理内存的步骤。

    现在来回答什么是虚拟内存地址和物理内存地址。虚拟内存地址由页号(与页表中的页号关联)和偏移量组成。页号就不必解释了,上面已经说了,页号对应的映射到一个页帧。那么,说说偏移量。偏移量就是我上面说的页(或者页帧)的大小,即这个页(或者页帧)到底能存多少数据。举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:首先到页表中找到页号4对应的页帧号(比如为8),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMC(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

    转自:https://blog.csdn.net/fukaibo121/article/details/75105848
    展开全文
  • 内存容量和内存地址

    千次阅读 2018-04-16 10:00:14
    计算机可以找到4GB个储存单元,但是一个储存单元到底是8位还是16位还是32位,不一定(可能不同的计算机定义不同)八位机一个储存单元就是八位,十六位机就是十六位,32位机就是32位。为什么是这样呢.....再次猜测,...

    当计算机的地址总线为32时,也就是说该计算机的寻址范围为2^32,即4GB。

    计算机可以找到4GB个储存单元,但是一个储存单元到底是8位还是16位还是32位,不一定(可能不同的计算机定义不同)

    八位机一个储存单元就是八位,十六位机就是十六位,32位机就是32位。为什么是这样呢.....再次猜测,因为32位机的数据总线是32位的,也就意味着每读取一次,可以获得32位的数据。所以将内存划分成32位为一格一格的比较好。



    按“字”寻址:就说明是存储单元大小为字长的位数,

    按“字节”寻址:说明存储单元是字节的大小。


    结构体的内存对齐:

    在C语言中有两种对齐:第一种按单字节对齐,2字节对齐,四字节对齐,甚至说是八字节对齐。当在程序中出现

    #pragma pack(2)
    struct peopl{
    
                char c;
                int a;
                double b;
                     };
    typedef struct peopl peopl;
    #pragma pack()

    上述说明时,这个结构体的内存排列是按2字节对齐的。那么在内存中是如何存放的呢?

    首先是 c:1xxx

    a:1111  1111                                               //c和a前三个字节共用一个地址(因为32位机的一个地址上有4个字节) 

     b:1111  1111   1111  1111                   //a的后一个字节和b的三个字节共用一个地址

                                               //b的中间3~7字节单独用一个地址   b的最后一个字节用一个地址

    所以对上述的结构体求所占大小:即为14个字节


    如果按四字排列即为

    c:1x xx xx xx

    a:1111  1111

    b:11111111   11111111

    所占字节为:16个字节


    #pragma pack(2)
    #pragma pack()

    如果没有上述两个关键字:结构体的内存排列按如下关系:



    展开全文
  • MMU的主要作用:虚拟地址到物理地址的转换;访问权限控制;设置虚拟存储空间的缓冲。 虚拟存储器:程序一般存于掉电不丢失的硬盘中,但是硬盘读写速度慢。所以系统上电后一般只在ROM中完成小部分硬件初始化程序,并...

    MMU的主要作用:虚拟地址到物理地址的转换;访问权限控制;设置虚拟存储空间的缓冲。
    虚拟存储器:程序一般存于掉电不丢失的硬盘中,但是硬盘读写速度慢。所以系统上电后一般只在ROM中完成小部分硬件初始化程序,并把程序搬运到内存中。然后,从内存中开始执行程序。但是,内存有限,不能一次性把所有代码加载到内存中,所以只把当前用到的一部分代码加载过来,把没用到的搬回磁盘。此时的效果等同于把所有程序加载到内存中,用户看来系统具有的内存比实际内存大的多。对于32位的CPU系统中虚拟地址空间有4GB大小,而嵌入式系统中的实际物理地址空间可能远小于此。
    这里写图片描述

    把虚拟地址空间分成一个个固定大小的块,每一块为一页。物理地址空间也分为同样大小的页。MMU要实现虚拟地址到物理地址的映射,CPU核发出虚拟地址VA;VA被转换为变换后的虚拟地址MVA给MMU;MMU把MVA转换成物理地址PA。
    页表:位于内存中,页表的基地址存于CP15的C2寄存器中,表中每一行(叫一个地址变换条目entry)对应于虚拟存储空间的一个页,这个entry包含虚拟内存块和物理块地址的对应关系、该页的权限、该页的缓冲特性。
    TLB(快表):CPU和内存速度级别相差较大,每次到内存中查表代价较大。根据程序局部性原理,把当前访问需要的条目存放在一个和CPU中寄存器速度差不多16字左右的TLB中。MMU把存储空间分为16个域,PC15中C3每两位控制一个域的访问权限。
    ARM支持的存储块:段1MB;大页64KB(可分为16KB子页);小页4KB(可分为1KB子页);极小页1KB(只能保存在细页表中)。
    大致过程:
    1)根据VA和C2找到一级页表条目
    2)若是段描述符,返回物理地址
    3)若该条目是二级页表描述符,继续根据虚拟地址找下一个条目
    4)找到第二个页描述符,返回物理地址

        一级页表描述符
    

    一级页表描述符

    [1:0]=01粗页表:256行,占内存1KB,每个条目表示4KB空间;[31:10]是二级页表地址。如:粗页表+大页,因为指向物理空间只能为1MB,所以256/16*64K或64/4;连续16个条目保存同一大页描述符。
    C2[31:14]+MVA[31:20]+0b00->粗页描述符;
    粗页描述符[31:10]+MVA[19:12]+0b00->大页描述符;
    大页描述符[31:16]+MVA[15:0]->PA
    [1:0]=10段,[31:20]一块1MB物理地址空间的起始地址。MVA[19:0]在这块中寻址。
    P15的C2[31:14]+MVA[31:20]+0b00——>段描述符。
    段描述符[31:20]+MVA[19:0]–>PA。
    [1:0]=11细页表,1024行,每个条目表示1KB空间;[31:12]是二级页表地址;细页表+大页,1024/64*64K或64/1,每个条目表示1KB,连续64个条目保存同一大页描述符
    二级页表描述符
    二级页表描述符

    展开全文
  • 关于内存地址和内存空间的理解

    万次阅读 多人点赞 2018-06-04 02:16:04
    1.内存地址用4位16进制8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一...
  • 内存地址从AC000H到C7FFFH,共有 K个地址单元,如果该内存地址按字(16bit)编址,由28片存储器芯片构成。已知构成此内存的芯片每片有16K个存储单元,则该芯片每片存储单元存储 位 (1)A.96 B.112 C.132 D.156 (2)A....
  • 前言 从大一一直困惑到研三的这几个概念今天静下心来总算是搞明白了,太开心太开心...答案当然是“地址”(address)了,你有居住地址,数据也有自己的地址,这个地址就是“内存地址”,如下一段程序: #include<s...
  • ![图片说明]...比如8086CPU来说。 地址总线20位 2的20次方 1MB 那内存条呢。 内存条是1MB怎么算? 而且32位CPU 内存寻址能力是4G 内存条也是4G 还有显存 这怎么理解?
  • 内存单元和字节的关系

    千次阅读 2012-07-21 11:29:07
    一个字节是一个内存单元 同时一个字节是8位 也就是一个内存单元既是一个字节也是8个二进制位,1G=1024M 1M=1024K 1K=1024字节 1字节=8位 一位是最基本单位 是一个二进制位 要么是0要么是1
  • 举个例子:地址0000A000H 到 0000BFFFH 共有多少个存储单元:16进制中转成10进制: A-10 B-11 C-12 D-13 E-14 F-15 0-0 1-1则 0000BFFFH 即 BFFF的 为 B*16^3+F*16^2+F*16^1+F*16^0 =11*16^3+15*16^2+15*16+15*1=...
  • 内存地址空间

    千次阅读 2018-06-01 17:23:23
    如果地址线是32位,那可寻址的范围是4G,内存地址从0-0xffffffff。 BIOS在内存最高地址处,最低1M空间内又有很多固定的用途,如下图所示: (图片出自:赵炯——Linux内核完全剖析——基于0.12内核,图2-4) 我...
  • 寄存器立即数和内存单元

    千次阅读 2013-06-30 10:59:18
    只有通用寄存器才能操作立即数 其他断寄存器 以及内存单元都要通过通用寄存器来中转 比如 mov ax,4 mov ds,3 --错误的 mov ds,ax --正确的   如果要操作内存中的数据 必须操作 ds 数据的寄
  • gdb查看内存地址和栈中的值

    万次阅读 2016-05-17 15:50:31
    gdb查看指定地址的内存地址的值:examine 简写 x-----使用gdb> help x 来查看使用方式 x/ (n,f,u为可选参数)n: 需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u...
  • 几个重要内存单元地址

    千次阅读 2004-09-15 15:47:00
    1、系统时钟地址0000:046CH——4字节时钟计数器,每次时钟中断时自动加1。系统启动时,其值为从午夜到现在的时钟中断数。当其计数达24小时时,则被置为0,并且将0000:0470H的字节置为10000:0470H——1字节该字节在...
  • Cortex-M MMU内存管理单元和 Linux

    千次阅读 2018-12-27 15:47:07
    内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。 在多用户、多进程的操作系统中,MMU使得各个用户进程都有独立的地址空间。 任何微控制器都存在一个程序能够产生的...
  • 内存单元的物理地址是由其所处的地址总线上的位置决定的,机器安装完成后,其物理地址是固定的、不变的,并不是由CPU分配的。 cpu只需要告诉控制器它要存取的内存单元地址;要找到这个地址单元则交给成组的地址译码...
  • 内存地址的概念理解

    千次阅读 多人点赞 2019-05-29 09:07:24
    1.内存地址用4位16进制8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一...
  • 答:将内存地址减去小地址再加1就是内存地址,即C7FFFH-AC000H+1=1C000H(给7加的是16,因为是16进制), 十六进制(1C000)16=2^16+2^15+2^14=64K+32K+16K=112K. 注意此处按字编址。需要构成的内存为112K16...
  • CPUMMU(内存管理单元

    千次阅读 2019-03-22 02:16:27
    CPU的架构:要求能够理解从源程序到微指令的整个经历过程:存储器的层次结构(网络资源下载到硬盘、磁盘缓存、内存、Cache、...MMU(内存管理单元):包括从逻辑地址到虚拟地址(线性地址)再到内存地址的变换过...
  •  用于内存芯片级的单元寻址,与处理器CPU连接的地址总线相对应。   可以直接把物理地址理解成插在机器上那根内存条本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后 把这个数组叫做物理...
  • 在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址。 先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于...
  • 内存映射(IO地址和内存地址

    千次阅读 2012-07-16 00:04:12
    ARM体系结构下面内存和i/o映射区别 (1)关于IO与内存空间: 在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问。端口号标识了外设的寄存器地址。Intel语法的in、...
  • 包括:内存管理单元MMU的作用,虚拟内存与物理内存之间的映射方式,页表的概念,高速缓存(Cache)的作用,物理内存与高速缓存之间的映射关系等。当然,想要深入了解,本文并不适合,本文只是从原理上,讲述以上几者...
  • 物理地址:这里说的物理地址是内存中的内存单元实际地址,不是外部总线连接的其他电子元件的地址!物理地址属于比较好理解的,物理地址就是内存中每个内存单元的编号,这个编号是顺序排好的,物理地址的大小决定了...
  • 单链表中结点值与指针在内存中是连续的吗 对于同一个结点,值与指针是一块分配的,是连续的。...分配给单链表内存单元地址必须是连续的, 转自:http://wenku.baidu.com/view/cec105d6b9f3f90f76c61bc1.html
  • 单元测试是提高代码质量保证代码正确性的重要保证。 DAO的单元测试有常见的两种方案。 【1】使用H2这类内存数据库进行单元测试。 【2】使用MySQL数据库,测试后回滚。 两种方案各有利弊,个人倾向于前者。 ...
  • 内存管理单元--MMU

    千次阅读 2013-08-12 15:19:54
    现代操作系统普遍采用虚拟内存管理(Virtual Memory Management...如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收
  • 变量的本质--内存单元

    千次阅读 2018-09-16 19:42:59
    内存单元有两个属性:值和地址 int a=3; int b=a+2; int *p=&amp;a; 指针就是地址,地址提供了间接操作数据的可能 在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 426,886
精华内容 170,754
关键字:

内存地址和内存单元