关于内存和内存地址的详解
内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一个又是用8位16进制表示呢?
首先,必须要知道内存地址只是一个编号,代表一个内存空间。那么这个空间是多大呢?原来在计算机中存储器的容量是以字节为基本单位的。也就是说一个内存地址代表一个字节(8bit)的存储空间。
例如经常说32位的操作系统最多支持4GB的内存空间,也就是说CPU只能寻址2的32次方(4GB),注意这里的4GB是以Byte为单位的,不是bit。也就是说有4G=4*1024M(Byte)=4*1024*1024Kb(Byte)=4*1024*1024*1024bit(Byte),即2的32次方个8bit单位。
所以说用4位16进制表示的内存地址和用8位16进制表示的内存地址,其实都是代表一个8bit的存储空间而已:
至于说为什么会出现一种是用4位十六进制表示内存地址,另一种用8位十六进制表示内存地址,那是根据不同的硬件环境来的。个人理解:有些CPU只能寻址16位(16根地址线),所以用4位十六进制表示地址就够用了。有些CPU只能寻址32位(32根地址线),所以用8位十六进制。
另外记住, 210 = 1024
1G = 1024 M
1M = 1024 Kb
1Kb = 1024 bit
2.理解内存。
程序和数据平常存储在硬盘等存储器上,不管你开机或关机了,它们都是存在的,不会丢失。硬盘可以存储的东西很多,但其传输数据的速度较慢。所以需要运行程序或打开数据时,这些数据必须从硬盘等存储器上先传到另一种容量小但速度快得多的存储器,之后才送入CPU进行执行处理。这中间的存储器就是内存。
无论何种存储器,软盘、硬盘、光盘或者内存,都有地址。因为它们要存储数据,所以就必须按一定的单位的数据分配一个地址。有了地址,程序才能找到这些数据。这很好理解,想想你们家为什么要有门牌号即可。
学习编程,必须对内存的地址有一个透彻的理解。我们编程中的每一行代码,代码中用到的每个数据,都需要在内存上有其映射地址。当然,我们并不需要掌握内存是如何进行编址,那是计算机系中的另外一门课:操作系统的事了。
内存地址:
计算机把所有的信息都给数字化了,所以它知道自已把一个数据,一条命令记到了内存中的哪个(些)位置。
看下面的例子:
如果让计算机在内存里记住“丁小明”这个名字,可以示意为:
在第一行中,每一格表示一段内存,而格子里的内容是这段内容记下的数据;第二行中每一格内数字就是对应的内存的地址。
可能有人会啄磨:为什么一个“丁”字(“小”“明”两字也一样)占用两个内存地址呢?这是因为汉字在一个地址(位置)里呆不下,必须放在连续的两个地址空间内。那么,什么东西可以放在单独的一个内存地址里呢?像英文的里字母,比如’A’, 像阿拉伯数字:比如’1’,可以,而且就是放在一个内存地址里。假设有一字符串“ABC”,被记在内存里,可示意为(这次我们假设从内存地址2000H处记起):
现在我们提几个问题:
计算机记住”丁”字的内存地址是多少? 答案是:1000H。请见上图
我们一直在说,在计算机中,所有信息都被数字化为2进制的0、1,所以,“丁小明”这个名字被也应该是一串:0001 0010 0111 0101……,可是在中图所画出的,计算机内存里记的,仍是“丁小明”三个字啊。
下面是解释,我们只举一个字”丁”讲解。我们假设在那一串里的 0001 0010 0111 0101 对应的是 “丁” 字,那么有:
让我们把字母’A’对应的图也画出来:
在上面的两个图中:
第一行分别是“丁”和“A”,它是给人看的。
第二行则是一串的的0和1,这才是计算机内存中实际存储的数据。
第三行是内存的地址。并不是每个0和1所占的位置都被编上地址。而是每8个才拥有一个地址。
关于第三行,你可以这样理解,门牌号是一个家庭分配一个,每家每户内还有客厅卧室,这些就没有地址了。
可见:
‘丁’的确是由一串0、1组成的。更确切地,从图上可以看出‘丁’是由16位0和1组成。这16数都存放在2个内存地址里。
‘A’也一样,它是由8位0、1组成的。占1个内存地址。
总结:内存地址是内存当中存储数据的一个标识,并不是数据本身,通过内存地址可以找到内存当中存储的数据。
关于内存和内存地址的详解相关推荐
- 内存测试工具memtester使用详解
memtester的下载地址:http://pyropus.ca/software/memtester/ 有源码安装包.deb包.rpm包等. 源码已经编译好,在linux下只要make一下就好了. ...
- Java内存模型(JMM)详解-可见性volatile
这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...
- 共享内存映射之mmap()函数详解
转 共享内存映射之mmap()函数详解 /span> 查看全文 http://www.taodudu.cc/news/show-3175071.html 相关文章: 子集生成(二进制法,逐步生成 ...
- 阿里云AMD服务器ECS计算型c7a、通用型g7a和内存型r7a性能参数详解
阿里云第二代AMD服务器ECS计算型c7a.通用型g7a和内存型r7a实例,CPU采用2.55 GHz主频的AMD EPYCTM MILAN处理器,单核睿频最高3.5 GHz,算力更强,云服务器吧详细 ...
- c语言指定变量地址,C语言中 “_at()” 特殊地址定位详解
C语言中 "_at()" 特殊地址定位详解 在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面 指令为 __at ,使用方法如下 int var ...
- PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解
PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解 uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了 ...
- php获取网卡mac地址吗,php获取网卡MAC地址步骤详解
这次给大家带来php获取网卡MAC地址步骤详解,php获取网卡MAC地址的注意事项有哪些,下面就是实战案例,一起来看一下. php获取网卡的物理地址,即mac地址.<?php /** 获取网卡的 ...
- 【IPv4】地址分类详解
IPv4 地址分类详解 文章目录 IPv4 地址分类详解 一. IPv4 地址形式 二. IP 地址的分类 1. A 类 IP 2. B 类 IP 3. C 类 IP 4. D 类 IP 5. E 类 ...
- 计算机自动获取IP地址流程详解
计算机自动获取IP地址流程详解 你知道吗? 我们在日常生活中直接插上网线接口就可以直接上网,不需要拨号上网也不需要设置IP地址.那么我们在日常是怎么获得IP地址的呢? 这里就需要介绍一种服务是由Int ...
- 计算机基础ip地址私有地址,关于ip地址的详解,看完这篇就够了
原标题:关于ip地址的详解,看完这篇就够了 前天我们发布了什么是公网ip?什么是内网ip?为什么ip地址通常以192.168开头?,有朋友反映有没有更基础的,那我们就从ip地址开始说起. 一.特殊的I ...
最新文章
- Java -- 基于JDK1.8的LinkedList源码分析
- 安装python缺少dll_解决Python安装时报缺少DLL问题【两种解决方法】
- 前端页面可视化设计工具
- rockycapture_RockyCapture航线规划软件介绍文档
- wordpress linux伪静态,nginx下wordpress伪静态设置
- CentOS node,npm,cnpm 环境部署
- 高德正式开放海外LBS服务,助力开发者出海
- 深度学习中的优化算法之SGD
- 部署Exchange 2010
- 网络安全行业是蓝景吗?
- 理论力学知识要点(五)
- 【数学与统计基础】常用统计检验方法的Python实现
- 剑侠世界2不显示服务器,剑侠世界2去哪个服务器好_哪个区人多问题说明_软吧...
- iwork8旗舰版 android,性能彪悍 双面神兽——酷比魔方iwork8旗舰版体验
- 微信内部H5页面:处理用户修改微信字体大小造成的页面溢出问题
- 计算机组成原理之输入输出设备
- thinkpad笔记本电脑更换固态硬盘
- 京东炸年兽脚本--亲测有效 2021最新版
- 解决Creo8.0许可证无效的问题
- Excel在统计分析中的应用—第二章—描述性统计-分组数据的中位数的求解方法(组离散数据)