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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值