admin 管理员组文章数量: 1184232
其实大部分数据都会作为各种数据类型存放在内存内, 而各种数据类型所占的字节大小也是不同的,例如上图解析的,char字符类型占1个字节, int类型和unsigned int类型占4个字节byte.
5. 引入内存地址概念。
即使我们把内存分成了以字节为单位的结构, 但是实际上内存里还是有非常多的字节的,例如64MB内存就有 64 × 1024 × 1024 个字节啊!
如果cpu要查找1个变量, 还是要1个个字节去找到话...还是1个很浪费时间的行为,所以为了避免去遍历内存,计算机系统就引入了内存地址这个概念。
举个例子, 内存就是一栋大楼, 而内存里每1个字节就是大楼的每个房间, 而内存地址就是房间的门牌号码了. 如果没有门牌号码,我们去访问某个住在大楼的人是十分苦难的, 只能从1楼开始每个房间去敲门.. 如果那个人住在顶楼你就悲剧了. 而如果你知道那个人的门牌号码, 就可以直接上去敲他的门查他水表了, 实在是方便很多啊.
内存也一样,
计算机操作系统
会给内存每1个字节分配1个内存地址, cpu只需要知道某个数据类型的地址, 就可以
直接
去到读影的内存位置去提取数据了.
6. 直接寻址技术.
当代计算机还实现了1个逆天的技术,就是直接寻址了.
什么意思呢, 还是用上面的例子说明, 假如你知道你要找的人住在那栋大楼的17楼 1702, 但是你还是需要从1楼走到17楼去找他, 这个过程还是需要时间成本的.
但是如果你具有了直接寻址技术, 就能直接跳到17楼 1702门前, 如果你找的下1个人在2楼, 又能从17楼直接跳到2楼, 逆天啊.
而直接寻址技术已经成为当代计算机软硬件的标准技术之一了, 也就是说只要cpu知道要访问数据的内存地址, 就能直接到内存的对应位置去访问数据!
7. 内存地址的表示方式
跟门牌号一样, 其实内存地址也是由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
也就是
Ox
0ff0f0f0 前面Ox代表十六进制, 所以你见到这种字母数字混合一次的地址方式,就是这样得来的了, 它实际上是1个二进制的数字啊. 不过计算机里面所有的东西都是二进制了..
8. 内存地址的数量决定cpu能访问的内存大小.
上面说了, 既然32位系统里内存地址长度是32位的. 所以32位的地址范围就是从 0000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 啦(Ox00000000 ~ OxFFFFFFFF), 这里有几个地址呢? 明显是有 2^32 个啦.
那么2^32到底是多少个? 2^32 = 4 * 1024(G) * 1024(M) * 1024(K) = 4294967296 , 就是
4G
啊, 而每1个地址对应1个1个字节, 容量就是1byte, 所以2^32个地址就总共能对应应
4GB
的内存容量啊, 这里的B指的是byte 字节啊。
假如你给32位的系统配上了8GB的内存, 操作系统最多也只能给其中4GB 分配地址, 其余 4GB 是没有地址, 因为地址不够用啊, 所以32位系统最多支持4GB内存就是这样来的。
那么64位系统呢, 对应地, 64位系统的内存地址是64位的二进制数啊, 0000 ...64个0 ~ 1111 ...64个1, 用十六进表示就是从Ox0000000000000000 ~ OxFFFFFFFFFFFFFFFF , 每个地址的长度比32位的长度多1倍! 而64位系统总共有多少个地址?
2^64 = 2^34 * 2^10(G) * 2^10(M) * 2^10(K) 也就是 17179869184 G(4G × 4G)个地址, 我艹这是神码概念, 也就是说64位系统配上64位cpu理论上支持17多亿GB的内存, 当然这个只是理论了, 实际上现在的普通主版能上个16GB都不错了。
见下图:
9. 关于指针。
大家都知道指针是用来存放内存地址的, 那么对于32位系统来讲, 内存地址是1个32位长度的2进制数, 而每1个内存单位长度只有1byte = 8bit(位), 所以1个指针 就需要4byte的内存来存放该指针的内容(1个内存地址)啦。
所以 我们定义1个指针 int *p; 然后求sizeof(p) 是返回4的, 4字节嘛~
而对于64位系统来讲, 内存地址是64位的2进制数, 所以sizof(p)就返回8了, 共需要8个内存单位去存放 64位系统的1个指针啊!
原文地址:
版权声明:本文标题:从32位到64位:升级内存容量的新篇章 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1772601845a3557204.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论