在百度上搜索,也许会得到这样的答案: 2 32 = 4 G B 2^{32} = 4GB 232=4GB
可是这个值是怎么得出来的?一个没有单位的数字,得出来一个带单位的值,首先量纲就对不上。
要回答这个问题,首先需要了解几个 “常识”:
- x86 平台的内存最小寻址单位是 1 字节 (1 byte, 1 B, 8 bit),一个地址指向一个字节的空间。
- 内存的地址是个数字,这个数字可取值的范围大小* 单位大小 =可管理的内存大小。
32 位(bit) 每一个 bit 可以取 0 或 1 两个值,所以有 2 ∗ 2 ∗ 2 … ∗ 2 = 2 32 2 * 2 * 2 … * 2 = 2^{32} 2∗2∗2…∗2=232 种可能取值,这个取值指的是地址这个数字,数字是没有单位的,取值范围就是 0 到 2 32 − 1 0 到 2^{32} - 1 0到232−1
所以,
可 管 理 的 内 存 的 大 小 = 2 32 ∗ 1 b y t e = 2 32 B 可管理的内存的大小 = 2^{32} * 1 byte = 2^{32} B 可管理的内存的大小=232∗1byte=232B
= 2 32 / 1024 K B = 2^{32} / 1024 KB =232/1024KB
= 2 32 / 1024 / 1024 M B = 2^{32} / 1024 / 1024 MB =232/1024/1024MB
= 2 32 / 1024 / 1024 / 1024 G B = 2^{32} / 1024 / 1024 / 1024 GB =232/1024/1024/1024GB
= 2 32 – 10 – 10 – 10 G B = 2 2 G B = 4 G B = 2^{32 – 10 – 10 – 10} GB= 2^2 GB= 4 GB =232–10–10–10GB=22GB=4GB
没有上面的解释,理解起来确实没头没脑的。
这也就解释了,bool 变量明明只要 1 bit 就可以表示了,但在一般编程语言里却需要 1 byte 的存储空间,因为一个内存地址指向的最小寻址单位是 1 byte。