问题起源:

64位CPU的64指的是什么

32位计算机的32位指的是啥

32位计算机装8G内存有用吗

32位应用程序和64位应用程序又是啥...

...

能说上来一点,但实际上含糊不清的概念有很多

下文主要从内存、CPU、操作系统的角度对一些容易模糊的基础知识做概况。

内存

主存储器,简称主存或内存,内存里的数据能被CPU直接访问。它的存储体由许多存储单元组成,每个存储单元可存储一串二进制代码(称为存储字)。

存储单元是内存的最小可寻址单位,通常都以字节(byte)为单位,一个字节占8位(bit)。

存储单元可存储的位数称为存储字长,存储字长是CPU一次能并行处理的二进制位数。

C语言中的指针是用来存放内存地址的,指针的大小就等于字长。对于32位系统,内存地址位数是4字节,指针也就是4字节,64位系统则是8字节。

CPU

我们所说的32位处理器,指的是CPU内部的通用寄存器的宽度为32位,一次能处理的最大位数为32位(一次处理4个字节),它的地址总线位数为32位 (地址总线位数决定了CPU的寻址能力)。

可寻址物理地址范围为4GB(2^32byte= 4GB) 。4GB即4G个字节,CPU可寻址4G个地址,根据内存地址访问内存的存储单元。

内存地址计算机操作系统分配,每一个字节分配一个内存地址,,cpu只需要知道某个数据类型的地址, 就可以直接去到读影的内存位置去提取数据(这里的"直接",指直接寻址技术)。

由此可知,32位的操作系统(32位处理器或64位处理器的计算机才能装32位操作系统),即使配上8GB内存,操作系统最多也只能给其中4GB分配地址。(实际能被操作系统访问到的一般是3.2GB左右,有一部分会被显卡缓存等占用)

CPU发展迅猛,从零几年开始CPU就全都是64位的了,64位CPU理论上最多支持16EB内存,可理解成近似于无限大。

CPU通过MMU(内存管理单元)访问内存

CPU 在访问内存的时候都需要通过 MMU 把虚拟地址转化为物理地址,然后通过总线访问内存。MMU 开启后 CPU 看到的所有地址都是虚拟地址,CPU 把这个虚拟地址发给 MMU 后,MMU 会通过页表在页表里查出这个虚拟地址对应的物理地址是什么,从而去访问外面的 DDR(内存条)。

内存的存取速度比中央处理器操作速度要慢得多,使CPU的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。

不同存储器访问时间差异很大,离CPU越近的存储器,速度越快,每字节的成本越高,容量也因此越小。

CPU中的寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(分级),再次是主存、磁盘。

计算机存储体系结构图:

高速缓冲存储器cache,用来提高CPU访问内存的速度,L1、L2、L3都属于高速缓存。

使用高速缓存的过程成为缓存,cache的效率由命中率来衡量,一个好的cache效率通常在80%-95%的命中率。

操作系统

我们所说的32位操作系统,指的是操作系统编译时使用x86位指令集,64位操作系统指的是使用x64指令集。

由上述可知,32位处理器的CPU是不可能装64位操作系统的,因为缺少64位指令集。

32/64位的应用程序也指的是编译时使用的指令集不同。

在windows上程序大多数是以exe形式发布的,得到的程序是目标文件以后的结果,本身是带有位数的。

在linux上,本身大部分软件包rpm等也是已经编译好的,也是带有位数的。

软件编程实际是面向特定指令集编译的,经过指令解释器编译成为控制信号传给CPU。

对于C、C++等需要操作系统提供的动态链接库和系统API形成的可执行文件来说,是有位数的。

而对于Java、.Net这类的依托于虚拟机或解析器来动态运行的语言来说,编译出来的程序是中间表示,运行时虚拟机通过不同平台的不同解释器,将中间指令生成与平台相对应的机器码,体现了java等编程语言的平台无关性。

操作系统和指令集是可以向下兼容的,这意味着只要满足硬件和软件兼容在64位操作系统上就可以运行32位应用程序(不能兼容32位的驱动)。

64位程序通常要比32位程序慢,因为64位指针比32位的大一倍。

64位操作系统运算速度更快(处理器一次可以取64位数据),理论上比32位提高了一倍,能访问的内存更大。

但是要在64位操作系统上运行64位软件才能发挥64位CPU的最佳性能,

在64位操作系统上运行32位程序,会调用32位相关的运行库,环境和32位一致,所以和运行在32位操作系统上的性能相差不大。

上面简要的介绍了,内存,CPU位数、操作系统位数、应用程序位数的概念

相关的组成原理、操作系统知识还有很多,有空闲的时候应该更深入的去了解这些基础知识,有助于理解程序的运行原理。

转载于:https://www.cnblogs.com/gss128/p/10920633.html

CPU位数、操作系统位数、应用程序位数浅析相关推荐

  1. c语言名字程序,c语言获得程序位数和操作系统位数和名称

    // vcis64.cpp : VC 64位程序开发心的--c语言获得程序位数和操作系统位数和名称. #include #include #include #include // 获取程序位数(被编译 ...

  2. C++中如何读取一个数的位数_C语言编写程序求水仙花数

    C语言编写程序求水仙花数 水仙花数是一个数学问题,其实质是一个三位数,个位数的立方加十位数的立方加百位数的立方之和等于这个三位数本身.例如153=1*1*1+5*5*5+3*3*3,即153=1+12 ...

  3. 6位数密码C++破解程序,并附上时间

    今天在看hash函数对于数字或字符进行加密的知识,有感而发就写了一个C++破解6位数数字密码的程序,程序很简单,也很容易理解,并给也给出了对于不同密码所需要破解的时间.好了,废话不多少,直接贴程序: ...

  4. 面试题1:一个人岁数的3次方是四位数,四次方是六位数,并知道此人岁数的3次方和4次方用遍了0--9十个数字,请编程写程序求此人的岁数

    代码如下: package com.javase.test; /**  * @author jt  *2015-10-21 下午5:14:46  *  */ //一个人岁数的3次方是四位数,四次方是六 ...

  5. 输出三位数的个十百位数

    从键盘输入一个三位数,编写程序依次输出这个三位数的个位数.十位数.百位数. 例如: 输入:456 输出:6 5 4 #include<stdio.h> int main() {int a; ...

  6. 十位数和个位数交换python_整型变量 x中存放了一个两位数,要将这个两位数的个位数字和十位数字交换位置,例如,13变成31,正确的Python表达式是________。_学小易找答案...

    [多选题]计量经济学检验主要是检验模型是否符合计量经济方法的基本假定.检验内容包括( ) [填空题](_)是运用理论计量经济学提供的工具,研究经济学中某些特定领域的经济数量问题. [多选题]下列属于时 ...

  7. 主存地址位数怎么算_两位数乘一位数也能口算?对!你没看错,不是特殊情况也行...

    什么叫四则运算?加.减.乘.除呗.在四则运算中,如果没有括号,运算规则是先算乘.除,后算加.减. 乘法也是算术中最常见的一种运算.它是将相同的数加起来的一种快捷方式.比如说16×8=128.表示:8个 ...

  8. 依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的5个数,且该数是奇数,则把这个四位数按从小到大的顺序存入数组b中,并计算满足上述条件的四位数的个数cnt。

    已知数据文件IN28.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位 ...

  9. 给一个不多于5位的正整数,要求: ①求出它是几位数②分别输出每一位数③按逆序输出各位数字,例如原数为123,应输出321

    给一个不多于5位的正整数,要求: ①求出它是几位数②分别输出每一位数③按逆序输出各位数字,例如原数为123,应输出321 int main() {int n;int a,b,c,d,e;//个,十,百 ...

最新文章

  1. 【stanford C++】——2.C++中函数
  2. 第十六周项目一-小玩文件(2)
  3. 性能测试 vs 负载测试 vs 压力测试
  4. 20210912模拟
  5. C++多继承与虚继承
  6. 文档预览 OfficeWebViewer:在浏览器中查看Office文档
  7. ThreadLocal剧集(一)
  8. [转]python3之模块psutil系统性能信息
  9. 清北考前刷题day6下午好
  10. Tokyo Tyrant (ttserver)的master-slave复制协议分析
  11. 人工智能是从什么时候开始发展的?AI的起源
  12. php的网页服务器根目录,php获得网站根目录的几个方法
  13. 手机文件传云服务器失败怎么回事,为什么百度云上传不了文件 百度云无法上传文件原因解决办法...
  14. IDE和SCSI硬盘的区别
  15. win10卸载软件通过控制面板
  16. “智慧统计”平台研发
  17. matplotlib subplot函数介绍
  18. 正点原子stm32F407学习笔记4——按键输入实验
  19. Java代码审计(5)JavaEE介绍
  20. Oracle PL/SQL实战

热门文章

  1. centos8 安装mysql_Centos 离线安装mysql8(以及在线安装)
  2. 新职业英语计算机unit5,新职业英语2Unit5.ppt
  3. loadrunner java 环境_java应用程序及服务器优化过程及loadrunner测试效果
  4. Scala match
  5. java character类
  6. python 字符串
  7. Oracle11g客户端安装配置
  8. 双向板课设按照弹性计算_T004 结构专业施工图技术问答结构布置与计算
  9. 在组织中管理 Windows Hello 企业版
  10. Java基础学习总结(159)——JDK15 正式发布了!新增14个新特性