关于计算机存储单位概述

大小

比特(bit)

简称 b

bit是表示信息的最小单位,是二bai进制数的一位包含的信息或2个选项中特别指定1个的需要信息量。

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

字节(byte)

简称B

Byte数据类型用一个字节储存,可区别256个数字,取值范围:0到255。 Byte是从0-255的无符号类型,所以不能表示负数.

1个字节能表示最大的值就是255, 所以很多时候我们见到有255最大的限制(例如ip地址)就是这个原因啊。

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

也就是说实际上普通的计算机系统是无法精确读取和定位到比特(bit)级的信息。

可以看成是有8个物理上连续的Bit组成的

8位(二进制数)bit(也叫比特)=1字节(byte)

千字节(kilobyte)kb

些人为了方便,就取第一个英文字。比如MB取M,KB取K,GB取G其实不太正确。你在电脑上就不会见到有M、K、G的只有MB、KB、GB。

1024b=1kb

其他

中文名简称英文单位英文简称进率
比特bitb0或1
字节字节byteB8位(1b*2^8)
千字节千字节KiloByteKB1024B(1B*2^10)
兆字节MegaByteMB1024B(1KB*2^10)
吉字节GlgaByteGB1024B(1MB*2^10)
太字节TeraByteTB1024B(1GB*2^10)
拍字节PetaBytePB1024B(1TB*2^10)
艾字节ExaByteEB1024B(1PB*2^10)
泽字节ZettaByteZB1024B(1EB*2^10)
尧字节YottaByteYB1024B(1ZB*2^10)

二进制序列用以表示计算机、电子信息数据容量的量纲,基本单位为字节B,字节向上分别为KB、MB、GB、TB,每级为前一级的1024倍

操作系统

32位X86架构是指个人电脑的bai地址总线du是32位的,CPU、内存控制器、操作系统都是按32位地zhi址总dao线设计。

内存

内存作为1个存储数据的存在, 有1个很重要的特性, 就是内存里的数据能被cpu直接访问。
cpu能不能直接访问硬盘的数据呢, 不能。 只能通过把硬盘的数据先放到内存里, 然后再从内存里访问硬盘的数据。

内存里面放的也是0和1这俩个二进制数字,所以内存里实际上有海量的小格子,每1个格子是1个bit,就只能存放1个数字(0或者1), 那么数值255需要几个格子来放呢? 就是8个格子啊, 1个字节byte啊。

但是问题来了, 我刚说了内存里的格子数量非常巨大, 如果cpu要读出某个指定的数据, 怎么去找呢?学过数据结构的都找到,遍历虽然简单,但在海量数据面前效率非常低下

所以实际上是吧内存8个bit八个bit排成一组,每1组称为1个单位,大小事1byte(字节),cpu每一次只能访问一个bute,而不能去单独访问具体的一个小格子(bit)所以1个byte字节就是内存最小的io单位


其实大部分数据都会作为各种数据类型存放在内存中,二各种数据类型所占的字节大小也是不同的,例如c语言中char字符类型占一个字节(中文俩个字节)

java一个char是俩个字节(java默认的是unicode编码)

对于16位编译器,int站32位,int的最大值bai为32767.

对于32位和64位编译器,int占32位(4字节)。int的最大值为2147483647

以通过打印sizeof(int)查看平台对应的int占用字节数,乘8后即为位数。


即使我们把内存分成了以字节为单位的结构, 但是实际上内存里还是有非常多的字节的,例如64MB内存就有 64 × 1024 × 1024 个字节啊!

如果cpu要查找1个变量, 还是要1个个字节去找到话...还是1个很浪费时间的行为,所以为了避免去遍历内存,计算机系统就引入了内存地址这个概念。

计算机操作系统会给内存分配一个内存地址,cpu只需要知道某个数据类型的地址,就可以直接去到读影的内存位置上去提取数据了


为什么32位系统只有4g的内存

跟门牌号一样, 其实内存地址也是由1个2进制数字来表示的. 每1个地址对应内存里的1个byte字节, 如果地址的值加1, 那么这个地址就对应下1个字节了.

​ 那么内存地址的长度是多少呢? 这个就是这篇文章标题所涉及的. 在32位操作系统中, 内存的地址就是32位的2进制数, 那么假如32位系统的某个内存地址是:
​ 0000 1111 1111 0000 1111 0000 1111 0000
那么它可以用十六进制表示成: 0 F F 0 F 0 F 0
​ 也就是 Ox0ff0f0f0 前面Ox代表十六进制, 所以你见到这种字母数字混合一次的地址方式,就是这样得来的了, 它实际上是1个二进制的数字啊. 不过计算机里面所有的东西都是二进制了..

上面说了, 既然32位系统里内存地址长度是32位的. 所以32位的地址范围就是从 0000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 啦(Ox00000000 ~ OxFFFFFFFF), 这里有几个地址呢? 明显是有 2^32 个啦.

4G 啊, 而每1个地址对应1个1个字节, 容量就是1byte, 所以2^32个地址就总共能对应应4GB 的内存容量啊, 这里的B指的是byte 字节啊。

​ 假如你给32位的系统配上了8GB的内存, 操作系统最多也只能给其中4GB 分配地址, 其余 4GB 是没有地址, 因为地址不够用啊, 所以32位系统最多支持4GB内存就是这样来的。

那么为什么在茶油4gb内存条的计算机上win32系统只显示3.25g的内存空间呢

因为IO设备占用了0.75G的地址空间,所以windows32系统就只能识别3.25G的内存空间了

总结

32位指的是电脑可以由32位的地址线,那么一共可以识别的存储器数量,(包括内存和各种硬件的输入输出端口)一共是2的32次方,由于内存最小的存储单位是byte,所以综上所述,32位系统最多只能识别3G多一点内存.

指针

大家都知道指针是用来存放内存地址的,那么对于32位系统来讲,内存地址是1个32位长度的2进制数,而每一个内存单位长度只有1byte(8bit),所以一个指针就需要4byte的内存来存放该指针的内容(一个内存地址)

所以我们定义一个指针int *,然后sizeof(p)是返回4,

而对于64位系统来讲,内存是64位的2进制数,所以sizeof(p)就返回8了,共需要8个内存单位去存放 64位系统的1个指针.

部分转载自https://www.cnblogs.com/luoxuw/p/11319049.html

Last modification:April 20, 2022
如果觉得我的文章对你有用,请随意赞赏