32位与4G内存限制
32位有4G内存限制,好像人所共知。但这个32位是指32位的CPU还是32位的操作系统?
答案是,都是。内存限制,是操作系统和硬件(CPU,也许还有内存控制器)共同制约的。CPU对应的是寻址物理地址,而操作系统对应的是寻址逻辑地址。实际上用户在使用计算机时,进程所访问到的地址是逻辑地址,并不是真实的物理地址,这个逻辑地址是操作系统提供的,CPU在执行指令时需要先将指令的逻辑地址变换为物理地址才能对相应的存储单元进行数据的读取或者写入(注意逻辑地址和物理地址是一一对应的)。
32位CPU地址总线数目为32根(一根就能瞬时传递一个0或1,代表一位),所以一次能处理32位(即4字节)的数据,可寻址物理地址范围为2的32次方= 4GB;64位CPU地址总线数目一般采用的是36位或者40位,能够寻址的物理地址空间为64GB或者1T。
对于32位的windows操作系统,其逻辑地址编码采用的地址位数是32位的,那么操作系统所提供的逻辑地址寻址范围是4GB。同理,64位逻辑地址寻址范围是1TB。
但是,在intel x86架构下,采用的是内存映射技术(Memory-Mapped I/O, MMIO),也就说将4GB逻辑地址中一部分要划分出来与BIOS ROM、CPU寄存器、I/O设备这些部件的物理地址进行映射,那么逻辑地址中能够与内存条的物理地址进行映射的空间肯定没有4GB了,看下面这幅图就明白了:
对于32位CPU,只能安装32位操作系统;64位CPU,既可以安装32位操作系统,也可以安装64位操作系统。如果64位CPU装32操作系统的话,由上述可知,也只能至多应用4GB的内存,太浪费了。64位操作系统只能安装在64位CPU的服务器上。
参考文章
http://www.cnblogs.com/dolphin0520/archive/2013/05/31/3110555.html
32位与4G内存限制的更多相关文章
- 32位Windows 7系统下,显示4G内存3G可用的原因。
由于32位操作系统只有那么多物理地址可用, 而硬盘.光驱.声卡,显卡,无线网卡等硬件设备也需要分配物理地址才可以使用, 所以系统会把一部分物理地址分配给它们, 剩下的物理地址分配给内存使用, 而剩下的 ...
- 基础 - 32位操作系统最多只支持4G内存。
32位操作系统最多只支持4G内存. CPU能不能直接访问硬盘的数据呢, 不能. 只能通过把硬盘的数据先放到内存里, 然后再从内存里访问硬盘的数据.我们平时玩游戏碰上读图loading 进度条的这个过程 ...
- 百杂讲堂之为什么32位系统只能操作4g内存
百杂讲堂之为什么32位系统只能操作4g内存 计算机内存中很多的单元,每一个单元就是一个字节,一个字节有8位.每一个单元有两种状态:0和1. 所以 两个单元就有4个组合: 3个单元就有8个组合: 依次类 ...
- 为什么32位系统最大支持4G内存??我自己悟出来了 终于 。。。。。
今天突然开窍了,想通了..... 以下是我的抽象想法: 32位系统 这个 多少位 指的是 硬件的 一次性发送过来的位数,一个字节 等于8位,内存的一个存储单元就是一个字节,即8位. 也可以这样来想这个 ...
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
问: linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 每个进程所拥有的4G独立的虚拟内存空间是什么意思?linux系统的虚拟4G空间中,高位的1G是用于系统内核运行的,那 ...
- ESXi 强制4G内存解决(VMware ESXi 6.0.0.update02 )
手上有个性能不太好的机器,想着装一个系统有点浪费,但是4G内存实际识别只有3.7G,到达不了EXSi的最低4G限制,无法安装.最终找到一个解决方法,经过验证适用于ESXi 6.0. 源自于:ESXi ...
- 笔记:C语言数据类型在32位与64位机器上的字节数
读<深入理解计算机系统> 第二章 信息的表示与处理 32位与64位的典型值,单位字节 声明 32位机器 64位机器 char 1 1 short int int 4 4 long int ...
- GCC下32位与64位机器类型变量所占字节数
GCC下32位与64位机器类型变量所占字节数 在C语言中,编译器一般根据自身硬件针对类型变量来选择合适的字节大小,下面列举一下在GCC编译器下32位机器与64位机器各个类型变量所占字节数目: C语言 ...
- 安装PHP扩展32位与64位的误区(x86与x64的查看)
在安装PHP扩展(DLL,SO),除了需要对应的PHP版本外,在WINDOWS还需要区分(TS线程,NTS非线程),如何判断呢? 1.如何判断是NTS还是TS(WINDOWS用户) 看PHP所在目录中 ...
随机推荐
- vim的操作命令
vim常用命令 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code ...
- day16-python之函数式编程匿名函数
1.复习 #!/usr/bin/env python # -*- coding:utf-8 -*- name = 'alex' #name=‘lhf’ def change_name(): name= ...
- 第三天,小作业,表达式,while循环
num += 1 等价于 num = num + 1num -= 1 等价于 num = num - 1num *= 2 等价于 num = num * 2num /= 2 等价于 num = num ...
- 一份快速实用的 tcpdump 命令参考手册
对于 tcpdump 的使用,大部分管理员会分成两类.有一类管理员,他们熟知 tcpdump 和其中的所有标记:另一类管理员,他们仅了解基本的使用方法,剩下事情都要借助参考手册才能完成.出现这种情况 ...
- Python+selenium鼠标、键盘事件
鼠标操作 现在的Web产品提供了丰富的鼠标交互方式,例如鼠标右击.双击.悬停.甚至是鼠标拖动等功能,在Webdriver中,将这些关于鼠标操作的方法封装在ActionChains类提供. 1.鼠标右击 ...
- jmeter-如何进行参数化-循环读取参数
在进行测试的时候,测试数据是一项重要的准备工作,每次迭代的数据当不一样的时候,需要进行参数化,从参数化的文件中来读取测试数据. 本经验主要介绍的是用Csv Data配置元件来进行参数化. 方法/步骤 ...
- Oracle中有关数学表达式的语法
Oracle中有关数学表达式的语法 三角函数 SIN ASIN SINHCOS ACOS COSHTA ...
- ERP类系统设计学习
文章:分布式.服务化的ERP系统架构设计 文章的方法是对系统进行拆分,拆分成多个子系统.
- gcc,gdb基础学习2
gdb调试: 源文件:test.cc >>g++ -g test.cc -o test.o 这里需要参数-g,因为接下来要使用gdb进行调试,生成目标文件test·o 因为需要将调试信息 ...
- PHP错误处理函数set_error_handler()的用法[转载]
定义和用法 set_error_handler() 函数设置用户自定义的错误处理函数. 该函数用于创建运行时期间的用户自己的错误处理方法. 该函数会返回旧的错误处理程序,若失败,则返回 null. 语 ...