C语言中sizeof运算符的用法和细节,你能详细解释一下吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2622个文字,预计阅读时间需要11分钟。
`sizeof`用于计算基本数据类型的大小,在特定的平台和编译器中,结果是固定的。如果使用`sizeof`计算结构体、联合体或类的大小,情况会复杂一些,因为它们的大小取决于成员的排列和类型。
sizeof作用于基本数据类型,在特定的平台和特定的编译器中,结果是确定的,如果使用sizeof计算构造类型:结构体、联合体和类的大小时,情况稍微复杂一些。
1.sizeof计算结构体
考察如下代码:
struct S1 { char c; int i; }; cout<<”sizeof(S1)=”<<sizeof(S1)<<endl;
sizeof(S1)结果是8,并不是想象中的sizeof(char)+sizeof(int)=5。这是因为结构体或类成员变量具有不同类型时,需进行成员变量的对齐。《计算机组成原理》一书中说明,对齐的目的是减少访存指令周期,提高CPU存储速度。
1.1内存对齐原则
(1)结构体变量的首地址能够被其最宽基本成员类型大小所整除;
(2)结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
(3)结构体的总大小为结构体最宽基本成员类型大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
本文共计2622个文字,预计阅读时间需要11分钟。
`sizeof`用于计算基本数据类型的大小,在特定的平台和编译器中,结果是固定的。如果使用`sizeof`计算结构体、联合体或类的大小,情况会复杂一些,因为它们的大小取决于成员的排列和类型。
sizeof作用于基本数据类型,在特定的平台和特定的编译器中,结果是确定的,如果使用sizeof计算构造类型:结构体、联合体和类的大小时,情况稍微复杂一些。
1.sizeof计算结构体
考察如下代码:
struct S1 { char c; int i; }; cout<<”sizeof(S1)=”<<sizeof(S1)<<endl;
sizeof(S1)结果是8,并不是想象中的sizeof(char)+sizeof(int)=5。这是因为结构体或类成员变量具有不同类型时,需进行成员变量的对齐。《计算机组成原理》一书中说明,对齐的目的是减少访存指令周期,提高CPU存储速度。
1.1内存对齐原则
(1)结构体变量的首地址能够被其最宽基本成员类型大小所整除;
(2)结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
(3)结构体的总大小为结构体最宽基本成员类型大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。

