在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍。

本文是学习VIPler的博文关于内存地址和内存空间的理解之后整理的,感谢VIPler提供学习资源。

1 内存地址

  我们经常在书上或者网络上看到4位和8位的内存地址表示方法,比如0x0001或者0x00000001,为什么会有这两种区别呢?

  其实,这两种表示方法都是表示的编号为1的内存地址,都只是一个地址编号,指向(或者说)一个1字节的内存空间。

  注意一点:

计算机存储器的内存是以字节为基本单位,也即一个地址代表1个字节(8bit)的存储空间。

  比如如下表示:

[0x0000]------>[8bit空间]
[0x0001]------>[8bit空间]
[0x0002]------>[8bit空间]
[0x0003]------>[8bit空间]
或者
[0x00000000]------>[8bit空间]
[0x00000001]------>[8bit空间]
[0x00000002]------>[8bit空间]
[0x00000003]------>[8bit空间]

  至于为什么会出现4位16进制地址0x0001和8位16进制地址0x00000001,是因为硬件所支持的寻址空间不同,有些CPU只能寻址16位(16根地址线),所以用4位十六进制表示地址就够用了。有些CPU只能寻址32位(32根地址线),所以用8位十六进制。

2 内存空间

  在计算机数据存储中,无论是代码还是数据,都会存储在硬盘中,掉电不会丢失。硬盘容量大,但是数据传输速度较慢,与CPU的运行速度不匹配,所以在运行程序或打开数据时,首先会把数据从硬盘等存储器上拷贝到数据传输速率较快的存储器上,然后再送到CPU进行处理,这个中间存储器就是内存。

(这就是为什么电脑开的进程多了,会卡,我们会想到换一个大一点的内存条。再卡就换固态硬盘。)

  内存也是一种存储器,也会有地址,这个地址就相当于家里的门牌号。

计算机把存储在存储器上的所有信息都数字化了,因为在计算机存储中都是0和1的二进制。

  下面通过两个例子进行说明:

(1) 存储汉字 “丁”,如下图:

  汉字在存储中占两个字节。计算机记住“丁”字的内存地址是0x1000(1000H)。其他的汉字也是类似的存储。

  第一行,是汉字本身,给人看的,

  第二行,是计算机在存储器中存储“丁”字的真正存储内容,0001001001110101在计算机中就代表“丁”字

  第三行,是“丁”字在计算机中的内存地址

  对于上面可以这样理解,内存地址相当于一个门牌号。一个门牌号对应的家里有卧室,厨房,卫生间,客厅等不同房间,这些就相当于一个内存地址对应的8bit内存空间。

  只有门牌号有编号,一家一个,家里的卧室等房间是没有编号的(也即没有内存地址)。

  翻译过来就是:一个内存地址对应一小块内存,这块内存存储8bit数据。

(2)汉字占两个字节,英文字母和阿拉伯数字占一个字节,以"A"为例

  理解方法与“丁”字类似。

  总结内存地址是内存中存储数据的一个标识,并不是数据本身,通过内存地址可以访问到对应内存中存储的数据。

C/C++数据在内存中的存储方式的更多相关文章

  1. 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)

    https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...

  2. C语言 float、double数据在内存中的存储方式

    float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...

  3. C语言之数据在内存中的存储

    C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...

  4. <转载>浅谈C/C++的浮点数在内存中的存储方式

    C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...

  5. C语言中浮点数在内存中的存储方式

    关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...

  6. QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用

    FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...

  7. Float在内存中的存储方式及IEC61131处理

    Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...

  8. float数据在内存中的存储方法

    浮点型变量在计算机内存中占用4字节(Byte),即32-bit.遵循IEEE-754格式标准.一个浮点数由2部分组成:底数m 和 指数e.                          ±mant ...

  9. JavaScript 之 数据在内存中的存储和引用

    栈和堆 大家都知道,JS中的数据类型包括两种:简单数据类型(String.Number.Boolean.undefined.null)和复杂数据类型(object). 在内存中分为栈区(stack)和 ...

随机推荐

  1. TCP和UDP的区别以及使用python服务端客户端简单编程

    一.TCP.UDP区别总结 1.TCP面向连接(如打电话要先拨号建立连接):UDP是无连接的,即发送数据之前不需要建立连接 2.TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失 ...

  2. .net core 2.x - 发送邮件

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...

  3. 安卓获取签名SHA1

    Debug签名:D:\Java\jdk1.8.0_151\bin>keytool -list -v -keystore debug.keystore  无需密码 Relese签名:D:\Java ...

  4. jedis keys和scan操作

    关于redis的keys命令的性能问题 KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hell ...

  5. vue中使用postMessage进行跨越传值

    想在“当前位置”获取子页面的title属性,但是main页面和子页面在不同的端口上,直接获取会出现: “Blocked a frame with origin from accessing a cro ...

  6. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  7. SpringCloud使用Sofa-lookout监控(基于Eureka)

    本文介绍SpringCloud使用Sofa-lookout,基于Eureka服务发现. 1.前景 本文属于是前几篇文章的后续,其实一开始感觉这个没有什么必要写的,但是最近一个朋友问我关于这个的问题,所 ...

  8. 【省选十连测之九】【DP】【组合计数去重】【欧拉函数】基本题

    目录 题意: 输入格式: 输出格式: 数据范围: 思路: 嵌套题的转移 基本题的转移 Part1 Part2 Part3 代码 题意: 这是一个关于括号组合的题. 首先定义一道题是由'(',')',' ...

  9. [转]Unity-移动设备可用的压缩解压缩源码

    原文:http://www.manew.com/thread-103250-1-1.html 最近在做客户端数据的分离,不希望对项目有什么影响,也不太想用AssetBundle,太麻烦,就在网上找了找 ...

  10. Android 应用内悬浮控件实践总结

    在工作中遇到一个需求,需要在整个应用的上层悬浮显示控件,目标效果如下图: 首先想到的是申请悬浮窗权限,OK~ 打开搜索引擎,映入眼帘的并不是如何申请,而是“Android 悬浮窗权限各机型各系统适配大 ...