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

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

一.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





目录
相关文章
|
24天前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
23天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
47 1
|
27天前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
30天前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
71 1
|
1月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
1月前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
37 2
|
1月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
41 4
|
1月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
53 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
4月前
|
存储 分布式计算 Hadoop
HadoopCPU、内存、存储限制
【7月更文挑战第13天】
281 14
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
374 0