- UID
- 1
- 精华
- 积分
- 76365
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
64位二进制整数能表示的最大值是1111111111111111111111111111111111111111111111111111111111111111b
这样很难看,因此我们把它拆开,就是
11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111b
然后用十六进制表示就是
0xFFFFFFFFFFFFFFFF
转换为十进制就是
18446744073709551615
因为是64个存储位元,因此可以表示的数字的数目是18446744073709551616个数字。那么现在的电脑CPU基本都是x64的了,向下兼容32位的操作系统。
64位和32位有什么区别呢?首先32位的CPU的“寻址范围”就受到32个二进制位的限制,也就是说,假设它要访问内存,它的能力是,只能访问4G内存。
32位二进制数最大值是11111111 11111111 11111111 11111111b,十进制4294967295,能表示4294967296个数,那么也就是能访问4294967296个内存单元(字节)。
4294967296个字节 = 4294967296 B = 4194304 KB = 4096 MB = 4 GB
也就是说32位CPU只能访问4GB的内存喽。
对于现在的Win7也好Win8也好Win8.1也好Win10也好,都是不够的。这些操作系统为了让用户用起来更稳定,让程序运行更快,它们需要更多的内存来处理驱动、内核、页表、正在运行的程序、暂停了的程序等。比如你开10个浏览器,那就要给每个浏览器分配内存空间,存储图片,文字,浏览器要显示这些图像就要告诉操作系统:“我这个程序要显示这些图像。”操作系统就要去问它安装的驱动:“你们这些驱动谁能显示图像?”这个时候显卡驱动就说“我能”,然后显示图像的工作就交给了显卡驱动……显卡驱动本身,以及其它的各种驱动,都是要占用内存的,否则它们在哪干活?只能在内存里干活。
假设用64位来表示内存位置的索引,那就是这样:
18446744073709551616 ÷ 1024 = 18014398509481984 KB
18014398509481983 ÷ 1024 = 17592186044416 MB
17592186044415 ÷ 1024 = 17179869184 GB
17179869183 ÷ 1024 = 16777216 TB
16777215 ÷ 1024 = 16384 PB(我倒是见过1PB的硬盘,估计是服务器用的,很大,像个抽屉,各种散热风扇)
16383 ÷ 1024 = 16 什么B
这个数字实在是太大了。大家平时用的硬盘也就500GB的样子,也有加装了256GB固态硬盘的,或者台式机装了几个3、4TB的仓库盘的,我听说过的最大的机械硬盘也就18T。
然而事实上,我们平时用的x64的Win7也好,Win8也好,都是AMD64的架构,除非那不是x64,那是IA64,才是Intel 64的架构。Intel的CPU支持AMD的x64。
AMD64规定CPU的指针是48位的,也就是有48位的寻址空间,用来临时存储数字的寄存器,它的高16位被用来做为其它用途,比如标记之类的。
48位的二进制数能表示的最大的数字是111111111111111111111111111111111111111111111111b
11111111 11111111 11111111 11111111 11111111 11111111b
十六进制是0xFFFFFFFFFFFF
十进制是281474976710655
能表示281474976710656个数,那就是这样算:
281474976710655 ÷ 1024 = 274877906944 KB
274877906944 ÷ 1024 = 268435456 MB
268435456 ÷ 1024 = 262144 GB(我内存条也才16 GB)
262144 ÷ 1024 = 256 TB
也是很了不起的寻址能力了。
|
|