找call写call吧 关注:96贴子:951
  • 1回复贴,共1

虚拟内存地址,和物理内存地址。

只看楼主收藏回复

虚拟内存地址,和物理内存地址。


IP属地:广东来自手机贴吧1楼2016-02-18 16:03回复
    一个程序在电脑中打开后,系统就会给它分配4G的虚拟内存空间。
    虚拟内存的地址又叫逻辑地址。一般都是以0x00401000开始。
    (这些是空的,不是实的。物理内存才是真实的。)
    .
    .
    在8086的 实模式下,把某一 段寄存器左移4位,然后与地址ADDR相加后被直接送到内存总线上,这个相加后的地址就是 内存单元的物理地址,
    而程序中的这个地址就叫 逻辑地址(或叫虚拟地址)。
    在80386的保护模式下,这个逻辑地址不是被直接送到内存总线,而是被送到 内存管理单元(MMU)。MMU由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换。
    .
    .
    内存地址是按位来编号的吗?每一个进制位,编一个内存地址。
    还是按字节来编号的。每一个字节,编号一个内存地址。
    在内存中,晶体管是二进制位中的位。
    晶体管通电时,存储的就是1;关电时,存储的是0。
    二进制的“0”或“1”就是1位。
    8个晶体管就是一个字节。
    但有个疑问,
    不知道一个内存地址,是一个晶体管的编号,还是一个字节的编号。
    .
    .
    我猜下,在内存条中,
    第一个晶体管就是第一位的内存地址。
    最后一个晶体管就是最后一位内存地址。
    第一位内存地址用0表示, 最后一位用4095999999表示(4GB)
    内存地址是16进制的数据(4GB)= F4240000
    不知对不对, 如有错请高手指正
    在C语言中,用0x开头表示16进制数。
    我猜下,4G的内存条,
    0x00000000就是第一位地址。
    0xF4240000是最后一位的内存地址。
    //
    位的内存地址,就是变量的内存地址。
    从这个内存地址开始计算,8位为1个字节。
    字节的大小,就是这个变量占用内存空间的大小。
    //
    这些都是虚拟的内存地址,从0x00401000开始计算的。
    .
    .
    这个逻辑地址不是被直接送到内存总线,而是被送到 内存管理单元(MMU)。MMU由一个或一组芯片组成,其功能是把逻辑内存地址映射为物理内存地址,即进行地址转换。


    IP属地:广东来自手机贴吧2楼2016-02-18 16:06
    回复