sizeof关键字

  数据类型的长度一直是我以前最不愿意面对的,又多又繁琐对于像我这样记性不好的人来说绝对是个噩梦啊。但是必须得记啊,经过总结,发现也并不是想象中那么的难啊。

sizeof

  首先说明一下,sizeof()是一个纯种关键字,和函数没有半点关系。它是一个复杂类型关键字,负责得到特定类型或特定类型变量的大小。将这些结果总结一下,会对记忆有很大帮助。

32位系统中:

数据类型

说明

字节数

取值范围

bool

布尔型

1

true,false

char

字符型

1

-128~127

unsigned char

无符号字符型

1

0~255

short

短整型

2

-32768~32767

unsigned short

无符号短整型

2

0~65535

int

整型

4

-2147483648~2147483647

unsigned int

无符号整型

4

0~4294967295

long

长整型

4

-2147483648~2147483647

unsigned long

无符号长整型

4

0~4294967295

float

单精度型

4

-3.4×10-38~3.4×10-38

double

双精度型

8

-1.7×10-308~1.7×10-308

long double

长双精度型

8

-1.7×10-308~1.7×10-308

char buf[128]

字符串

128

指针

4

数组

长度*下标

64位系统中:

数据类型

说明

字节数

bool

布尔型

1

char

字符型

1

unsigned char

无符号字符型

1

short

短整型

2

unsigned short

无符号短整型

2

int

整型

4

unsigned int

无符号整型

4

long

长整型

8

unsigned long

无符号长整型

8

float

单精度型

4

double

双精度型

8

long double

长双精度型

16

char buf[128]

字符串

128

指针

8

数组

长度*下标

结构体的sizeof

  以下是先辈总结的内容,感觉写的很好,简单易懂。拿来引用一下,具体出自哪位高人之手也已不得而知。总之感谢一下编程界的各位前辈,为我们总结这些宝贵的知识。接下来我们以32为操作系统为基础进行讨论:

  • struct 结构大小和顺序、#progma pack参数有关系
  • struct 子项在内存中的按顺序排列,在没有#progma pack(n)参数的情况,各个子项的对齐系数为自己长度。
  • 在有#progma pack(n)参数的情况,各子项的对齐系数为min(自己长度,n);
  • struct 整体的对齐系数为子项对齐系数最大值。
struct A{
    char a;  //字长1对其系数1
    char b;  //字长1对其系数1
    char c;  //字长1对其系数1
};//整体对其系数为1

这里写图片描述
因此sizeof(struct A)=3;
char[32]字符类型的数组,是相当于32个独立且连续的内存空间,每一个字长1对其系数1。

struct B {
    int a;   //对其系数4
    char b;  //对其系数1
    short c; //对其系数2
};//整体对其系数4

这里写图片描述
short c对其系数2必须和偶地址对其,int a同理也与能4的倍数地址对其。
粉色内存被结构占用因此sizeof(strcut B)=8。

struct C {
    char b;   //对其系数1
    int a;    //对其系数4
    short c;  //对其系数2
};//整体对其系数4

这里写图片描述
int a 从4的倍数地址开始,所以开始地址是4,因为结构整体对其系数为4,因此short c后的两个内存被占用,使大小为4的倍数。sizeof(struct C)=12

#progma pack (2)
struct D {
    char b;    //对其系数min(长度=1,n=2)=1
    int a;     //对其系数min(长度=4,n=2)=2
    short c;   //对其系数min(长度=2,n=2)=2
};//整体对其系数2

这里写图片描述
#progma pack (2) 对int a的放置产生影响,
#progma pack (n) 只能取1、2、4
因此 sizeof(struct D)=8

总结

  sizeof一般在动态分配内存时常会被用到,尤其是给struct分配内存空间时一定要多加注意。最后强调一下,sizeof是个关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值