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

基本的数据类型有:以32位PC为列。

char     1字节

int        4字节

long     4字节

short    2字节

signed char        1字节

unsigned char    1字节

unsigned long    4字节

unsigned short   2字节

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值