c/c++中各数据类型在内存中的存储方式

来源:互联网 发布:软件登记流程 编辑:程序博客网 时间:2024/06/06 02:53

基本的数据类型有:

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