C/C++数据在内存中的存储方式
在学习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++数据在内存中的存储方式的更多相关文章
- 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)
https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...
- C语言 float、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...
- C语言之数据在内存中的存储
C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- C语言中浮点数在内存中的存储方式
关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...
- QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用
FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...
- Float在内存中的存储方式及IEC61131处理
Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...
- float数据在内存中的存储方法
浮点型变量在计算机内存中占用4字节(Byte),即32-bit.遵循IEEE-754格式标准.一个浮点数由2部分组成:底数m 和 指数e. ±mant ...
- JavaScript 之 数据在内存中的存储和引用
栈和堆 大家都知道,JS中的数据类型包括两种:简单数据类型(String.Number.Boolean.undefined.null)和复杂数据类型(object). 在内存中分为栈区(stack)和 ...
随机推荐
- python设计模式---结构型之代理模式
主要想着nginx:) from abc import ABCMeta, abstractmethod # 结构型设计模式---代理模式 class Actor: def __init__(self) ...
- Semantic difference between object expressions and declarations
object expressions are executed (and initialized) immediately, where they are used; object declarati ...
- wordpress网站迁移
1.首先从原网站导出数据库文件 进入mysql文件夹:/etc/mysql mysqldump -uroot -p wordpress > wordpress.sql 2.将原网站文件打包 ta ...
- 使用Fiddler完成Android和IOS手机抓包Https
实现原理 Fiddler是PC端有名的HTTP抓包工具,利用它我们可以轻松实现对主机上所有http/https网络请求的捕捉.查看和修改操作. 同时它也提供了代理模式,其它主机由它代理发送的网络请求也 ...
- Paxos协议超级详细解释+简单实例
转载自: https://blog.csdn.net/cnh294141800/article/details/53768464 Paxos协议超级详细解释+简单实例 Basic-Paxos算法 ...
- mpvue中使用wxParse,解析a标签跳转问题
安装:npm i mpvue-wxparse js:import wxparse from "mpvue-wxparse"; css:@import url('~mpvue-wxp ...
- fiddler安装 与 https
1.下载最新版fiddler ,强烈建议在官网下载:https://www.telerik.com/download/fiddler 2. 正常傻瓜式安装,下一步,下一步,安装完毕后,先不用急于打开软 ...
- org.apache.http.client.ClientProtocolException: URI does not specify a valid host name
问题截图: 原因:http:// 少了两个//
- 面试题:int和Integer的区别
java底层源码: -128 127之间
- Git 常用命令整理(转)
初始化配置 #配置使用git仓库的人员姓名 git config --global user.name "Your Name Comes Here" #配置使用git仓库的人员em ...