2020年8月1日,是中国人民解放军建军93周年的好日子。昨天晚上,DNF也发生了一件意义重大的事情:64位客户端登录格兰之森体验服。用了十多年的32位程序,终于要发生进化了。32位到64位到底是什么意思呢?它又能解决什么问题呢?想要了解这些问题,我们可以先从32位的问题入手。
不知道各位读者目前手边的电脑安装内存是多大,操作系统又是多少位的。如果你安装的是32位的操作系统,那么很抱歉,它并不能运行64位程序,而且最大支持可以寻址的内存理论上,也不会超过4GB。
32位操作系统,实际上连4GB内存都无法全部使用
计算机最小存储单位计算机最小的存储单位是什么?答案是bit(位)。相信读者们都熟知的一个常识是,计算机存储数据利用的是二进制数字0和1。1个bit实际上就是存放一个二进制数字的位置。1个bit仅能表示2种数值,即0或1。
我们平时所讲到的,一个文件的大小是多少KB,多少GB,实际上并非指的多少bit,而是Byte(字节)。1Byte=8bit,如果把1个bit理解为存放数据的一个小格子,那么1Byte就是8个这样的小格子并排放置。
bit与Byte的关系
1个Byte可以表示多少种值呢?很显然,每个格子都能有2种数值,那么8个格子自然就是8个2相乘,即2^8=256种。
内存(RAM,Random Access Memory)实际上,我们存储在硬盘上的游戏或程序,并不能直接被CPU读取,必须借助内存这个中间人才行——内存是可以直接与CPU进行数据交换的存储器。程序运行时,必要数据首先被读取到内存中,接着才能由CPU进行处理。与硬盘等外部存储器相比,内存容量通常要小得多,因此,直接将硬盘上所有的内容一股脑全都塞给这个中间人的情况虽然理想,却是行不通的。操作系统能够帮助我们,只将程序运行的必要数据传递给内存,当它变得不必要时,再扔掉以释放内存空间。
我电脑里DNF的大小是24.5GB,将它全部读取到内存中显然是不可能的
为了降低数据读取的工作量,实际上在内存中是把8个bit排列成一个1组,以1组数据为最小单位去访问的,而不能直接访问1个bit。通过上文我们已经知道,这最小单位占用的空间大小,就是1个字节Byte。它也就是CPU每次能够访问的数据的最小单位。插句题外话,开发并运营“今日头条”的公司就叫做Bytedance(字节跳动),这里的Byte就是指我们本篇所讲的字节。
内存地址与可用内存大小在内存中,我们已经确定了以1个Byte代替1个bit来减轻数据访问工作量的方式。但显而易见,这仍然不够。内存中可以存储的Byte非常多,光是1GB就有2^30Byte,即约10亿个字节,几乎接近中国目前总人口的70%。在10亿人当中找到1个人的难度可想而知。
为了解决这个问题,我们引入内存地址的概念,即给这10亿个人每人都分配一间住房。这样,在我们想找1个人的时候,只需要知道他住在那里(内存地址)就可以了,而不再需要一个人一个人的认过去。现实生活中我们的地址表示方式是通过行政区域的概念,从大到小来实现的,比如“北京市北京市海淀区知春路甲48号”。而在计算机中,则是以一串二进制数字来表示的。
我们一直讲到的32位系统,实际上就是将上述表示内存地址的这一串数字的长度定位32。每个数字均能填入一个数字,32个数字构成的每一个值都可以代表一个内存地址,每个内存地址上都存放了一个大小为1Byte的数据。内存地址的长度,从根本上决定了理论上可使用的内存的最大大小。显而易见的是,32个数字能够表示2^32个内存地址,即约4GB的数据量。因此,我们电脑明明安装了4GB或以上的内存,但当使用32位操作系统时却并不能完全使用的道理,就源自于此处。
如果将内存地址的长度扩大为64bit,即使用64位系统,理论上我们能调用的内存上限,则扩大到了2^64=256TB,这是32位系统允许的最大内存的40亿倍。
DNF内存占用作为一个2003年立项开发的游戏项目,DNF的编写必然是以32位环境为基础的,毕竟64位的架构,在2003年才刚刚被引入到个人计算机领域的主流。实际上我们的电脑大规模的变为64位已经是到了Window7的后期,早已过了2010年了。而2003年,我们的机器大多用的还是Windows XP甚至Windows 2000。
由于32位软件的局限性,DNF所能调用的最大内存当然也不超过4GB。在游戏的聊天框内输入“//monitor”命令,我们就能够看到包括当前内存占用情况(Memory Usage)等一系列数据了。
DNF内存占用情况
众所周知,DNF这款游戏占用的内存空间是极大的。刚登录游戏后,我们第一次释放技能、第一次进入副本时都可能会出现卡顿,这就是计算机将各类贴图数据读入到内存中造成的。并且后续游戏过程中,只要不退出游戏,这些数据基本都不会被释放,所以游戏时间越久,我们的内存占用会越大,当超过了一定限度(比如4GB)时,游戏就会因为内存溢出而崩溃闪退了。
所以,这次游戏从32位升级为64位,可谓一次史诗性的升级,理论上直接将内存调用最大上限从4GB变为了256TB,相当于取消了这个限制。也就是说,我们以后再也不会遇到由于内存溢出而导致游戏崩溃的事情了。实际上,它能从根本上解决我们长时间登录游戏不下线、使用多个角色切换进行游戏、频繁打团等经常导致游戏卡顿或闪退的问题。
不过,正如开头我们所说,32位的操作系统是无法运行64位的程序的。也就是说,如果你的电脑还在坚持使用32位系统,那么是时候对它进行更新了。
亦或者,换个游戏?