数据在内存中的存储(超详细讲解)

简介: 数据在内存中的存储(超详细讲解)

一.C语言中数据类型的介绍



1.c语言的内置类型及大小(单位字节)


char        字符数据类型     1

short       短整型      2

int           整型         4

long        长整型      4/8

long long   更长整型     8

float        单精度浮点数     4

double    双精度浮点数     8


2.整型家族


char          signed    char

                unsigned    char

char存储的时候是存储的对应的ASCII码值,所以也归为整型家族;

short         signed     short  [ int ]

                unsigned   short  [ int ]

int             signed     int

                unsigned   int

long          signed    long      [ int ]

                unsigned    long    [ int ]

long long      signed    long long    [ int ]

                   unsigned   long  long      [ int ]  


3.浮点数家族


float

double

long   double


4.自定义类型(构造类型)


数组类型     int   arr1[10]   ---->类型为  int   [10]

                  char   arr2[10]   ----->类型为  char   [10]

                  int   arr3[5]    ------>类型为  int   [5]


结构体类型   struct

                    struct {                                  

                             结构体所包含的数据成员,包括变量数组

                            }结构变量;//结构变量可以指定一个或则多个


                  例如:

                      struct

                            {

                             char  name[11];

                             char  sex[5];

                             int    age;

                            }Stu;


枚举类型      enum

               如:enum { red=1, oreange=2, yelloe=3, green=4,blue=5}


联合类型      union


5.指针类型


int*  p1

float*   p2

char*   p3

void*   p4

结构体指针

......


6.空类型


void  (表示空类型,无类型)

通常应用函数的返回类型,函数的参数,指针类型

void   test( )

{

      int  i = 0;

      printf("%d\n",i);

}  

void *   p


二.整型数据在内存中的存储



1.二进制


注意实际上整型数据在内存中的存储,计算等操作都是用的补码

整型数据的二进制的表现形式有3种

原码,反码,补码

1.正整数的原码,反码,补码相同

如:599d7824f2eb471bbbfc628ac9292576.png


2.负数的原码,反码需计算


4544f2cb8b2a424094a68a3f1644b92b.png


2.整型数据在内存中的存储(示例)


10eb3bbac4aa43679fd9cc5cbfdc7b62.png


本质上数据在内存中是以二进制的形式存储的,但是在VS上为了方便展示,显示的是十六进制60930656d82145a58baa061ef32e8026.png


这里的存储顺序是:小端字节序存储(下面有数据字节序存储分类)



3.数据字节序存储分类(2种)


字节序:是以字节为单位 ---> 讨论存储

存储的顺序分为两种:

1.小段字节序存储:把一个数据的低位字节的内容,存储在低地址处,把高位字节的内容,存储在高地址处;

2.大端字节序存储:把一个数据的低位字节的内容,存储在高地址处,把高位字节的内容,存储在低地址处;

eff6a9592ada4fa9bb544db7020f131f.png

编程实现:检测VS上是哪种储存形式

----------------->思路:

b5b99df76b42423fa2aa9bcc81cc2dfa.png

所以可以打印出一个字节的内容

如果是 1 ,则是小端字节序存储

如果是 0 ,则是大端字节序存储

代码实现:

#include <stdio.h>
int main()
{
  int num = 1;
  if (*((char*)&num) == 1)
  {
    printf("小端字节序存储\n");
  }
  else
  {
    printf("大端字节序存储\n");
  }
  return 0;
}


运行结果:

448763b6a3094a6f8bbd880e6d168bbc.png


三.整型家族有符号和无符号的区别



char          signed    char

                unsigned    char


short         signed     short  [ int ]

                unsigned   short  [ int ]


int             signed     int

                unsigned   int


long          signed    long      [ int ]

                unsigned    long    [ int ]


long long      signed    long long    [ int ]

                   unsigned   long  long      [ int ]


我们所说的  short,  int  , long , long long 都是默认的是(有符号的)  signed  short  ,  signed  int , signed long ,   signed  long  long


但是char  到底是signed  char  还是 unsigned  char  我们不知道


但是在VS上char------>是signed    char

有符号和无符号的区别:

d0ed017d8146440da32d7acf01a824d2.png5387230d8310421b8b6197ec891d1ae0.png





目录
相关文章
|
20天前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
3月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
111 11
|
4月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
118 14
|
4月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
232 1
|
4月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
4月前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
616 1
|
3月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
635 1
|
2月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
3月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
3月前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
38 3