初探c语言中各数据类型在内存中的存储方式

来源:互联网 发布:淘宝售后客服在哪里 编辑:程序博客网 时间:2024/06/10 09:01

基本的数据类型有:
int     4
long    4
short    2
signed char 1
unsigned char 1
unsigned long  4
unsigned short 2
float 4
double 8

基本为:
char    1字节
short   2字节
int     4字节
long    4字节
float   4字节
double  8字节

typedef struct
{
 char ;
 char ;
 short ;
};
charcharshort 类型的结构体占4字节内存。
┌───┬───┐
│ char │ char │2字节
└───┴───┘
┌───┬───┐
│    short     │2字节
└───┴───┘


typedef struct
{
 short;
 char;
 char;
}
 Short char char 类型的结构体占4字节内存.
┌───┬───┐
│    short     │2字节
└───┴───┘
┌───┬───┐
│ char │ char │2字节
└───┴───┘
typedef struct
{
 char ;
 short ;
 char ;
}csc;
Char short char 类型的结构提占6字节内存,以short 做2字节对齐
┌───┬┄┄┄┐
│ char │ null │2字节
└───┴┄┄┄┘
┌───┬───┐
│    short     │2字节
└───┴───┘
┌───┬┄┄┄┐
│ char │ null │2字节
└───┴┄┄┄┘

typedef struct
{
 double ;
 char ;
 char ;
 char ;
}
double char char char 类型的结构体占16字节内存
8字节
┌───┬───┬───┬───┬───┬───┬───┬───┐
│                            double                            │
└───┴───┴───┴───┴───┴───┴───┴───┘
8字节
┌───┬───┬───┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┐
│ char │ char │ char │                 null                 │
└───┴───┴───┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┘

typedef struct
{
 char ;
 char ;
 double ;
 char ;
 char ;
 char ;
}
char char double char char 类型的结构体占24字节内存
8字节 使用2字节空余6字节
┌───┬───┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┐
│ char │ char │                     null                     │
└───┴───┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┘
8字节
┌───┬───┬───┬───┬───┬───┬───┬───┐
│                            double                            │
└───┴───┴───┴───┴───┴───┴───┴───┘
8字节 使用3字节空余5字节
┌───┬───┬───┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┐
│ char │ char │ char │                 null                 │
└───┴───┴───┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┘

typedef struct
{
 char ;
 int ;
 double;
 char ;
 char ;
 char ;
 int ;
}
char int double char char char int 类型的结构体占用24字节内存
8字节 使用2字节空余6字节
┌───┬┄┄┄┬┄┄┄┬┄┄┄┬───┬───┬───┬───┐
│ char │         null         │             int              │
└───┴┄┄┄┴┄┄┄┴┄┄┄┴───┴───┴───┴───┘
8字节
┌───┬───┬───┬───┬───┬───┬───┬───┐
│                            double                            │
└───┴───┴───┴───┴───┴───┴───┴───┘
8字节 使用3字节空余5字节
┌───┬───┬───┬┄┄┄┬───┬───┬───┬───┐
│ char │ char │ char │ null │             int              │
└───┴───┴───┴┄┄┄┴───┴───┴───┴───┘
typedef struct
{
 char ;
 short ;
 int ;
 double ;
 char ;
 int ;
 float ;
}
char short int double char int float 类型的结构体占用32字节内存
8字节 使用2字节空余6字节
┌───┬┄┄┄┬───┬───┬───┬───┬───┬───┐
│ char │ null │    short     │             int              │
└───┴┄┄┄┴───┴───┴───┴───┴───┴───┘
8字节
┌───┬───┬───┬───┬───┬───┬───┬───┐
│                            double                            │
└───┴───┴───┴───┴───┴───┴───┴───┘
8字节 使用3字节空余5字节
┌───┬┄┄┄┬┄┄┄┬┄┄┄┬───┬───┬───┬───┐
│ char │         null         │              int             │
└───┴┄┄┄┴┄┄┄┴┄┄┄┴───┴───┴───┴───┘
8字节 使用3字节空余5字节
┌───┬───┬───┬───┬┄┄┄┬┄┄┄┬┄┄┄┬┄┄┄┐
│             float            │             null             │
└───┴───┴───┴───┴┄┄┄┴┄┄┄┴┄┄┄┴┄┄┄┘
对上一个结构体做位置变更,查看内存占用情况
typedef struct
{
 char ;
 char ;
 short ;
 int ;
 int ;
 float ;
 double ;
}
经过位置变更,占用内存为24字节

┌───┬───┬───┬───┬───┬───┬───┬───┐
│ char │ char │    short     │             int              │
└───┴───┴───┴───┴───┴───┴───┴───┘

┌───┬───┬───┬───┬───┬───┬───┬───┐
│             int              │            float             │
└───┴───┴───┴───┴───┴───┴───┴───┘

┌───┬───┬───┬───┬───┬───┬───┬───┐
│                            double                            │
└───┴───┴───┴───┴───┴───┴───┴───┘

typedef struct
{
 short ;
 char ;
 char ;
 char ;
 int ;
}
short char char char int 类型的结构体占用12字节内存
4字节
┌───┬───┬───┬───┐
│    short     │ char │ char │
└───┴───┴───┴───┘
4字节 使用1字节剩余3字节
┌───┬┄┄┄┬┄┄┄┬┄┄┄┐
│ char │         null         │
└───┴┄┄┄┴┄┄┄┴┄┄┄┘
4字节
┌───┬───┬───┬───┐
│             int              │
└───┴───┴───┴───┘


0 0
原创粉丝点击