【深度剖析】数据在内存中的存储(上)

简介: 【深度剖析】数据在内存中的存储

一. 数据类型的详细介绍


在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式,那么数据类型可以分为以下几种:

18403113d34a4a83a93bd41f7dbafc77.png

数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。在本文接下来的部分我们将介绍基本类型!


1)整数类型

53be6d54087c4ee2a91039d479a24d92.png

注:不同数据类型在不同环境下所占的字节大小是不一样的,下图供参考:

99d6dd76bc024ccdb972fdff7224d31d.png

2)浮点类型

84656c06bc58407697d8665b9eeee308.png


3)void类型

c6515fd8a33a4a1ca2e3b1ad9addfb2d.png


二 .整形在内存中的存储:原码、反码、补码


接下来我们介绍关于整形数据是如何在内存中存储的:


计算机中整数有三种二进制表示方法,即原码,反码,补码。三种表示方法均有符号位和数值位两部分,符号位都是用 0 表示“正数”,用 1 表示“负数”。


正数的原码,反码,补码相同;

负数的原码,反码,补码各不相同;


原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码

补码:反码+1就可以得到补码


对于整形来说:数据在内存中存放的是补码!!!

为什么呢?

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;

同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。


举个例子来介绍下原码反码和补码:

162febd4c6e54673af4885ace852b129.png

对于上面所说的,有的小伙伴可能会问,那为什么整形在内存中存放的补码呢?而不是原码和反码呢?


我们举个例子来验证一下这个问题:由于正数的原码反码补码相同,为了更好的证明,我们取个负数来演示:

d9ee610885474325b0cb449a2198714f.png

我们发现,在内存中拿出的地址,刚好对应我们的补码,一个字节对应8个比特位,所以1111=f,所以在内存中对应的地址就是fffffff6,至于为什么和内存中显示的f6ffffff不一样,这是我们后面要介绍的大小端问题,这个例子也很好的验证了在内存中存放的是补码!!!

目录
相关文章
|
5月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
1913 0
|
5月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
583 1
|
5月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
528 0
|
11月前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
423 12
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
294 14
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
1040 1
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
948 0
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。