sizeof必须要知道的那些事

本文探讨了sizeof操作符在计算自定义类型时涉及的内存对齐问题,通过实例分析了不同环境下结构体的sizeof结果。介绍了VS与Linux环境下可能出现的差异,并详细解释了编译器的对齐规则,包括默认对齐方式和#pragma pack(n)的影响。通过对多个结构体的分析,阐述了如何计算结构体的大小,并提供了复杂数据结构对齐的处理提示。
摘要由CSDN通过智能技术生成

sizeof对于大多数人来说是即熟悉由陌生的。熟悉是指大家基本都用过,也知道sizeof是操作符不是函数;陌生就是指sizeof在计算自定义类型的时候,会涉及内存对齐方式,返回结果往往与我们想的大相径庭。本文就是结合内存对齐方式来介绍如何求sizeof的返回值。先来做个测试,各位看官如能准确说出下面几个结构体的sizeof大小的话,楼主觉得你已经没有必要再看下去,请出门左拐~ 

struct st1
{
	double a;
	char b;
	int c;
};
struct st2
{
    char b;
    double a;
    int c;
};

#pragma pack(push)  
#pragma pack(4) 
struct st3 
{ 
char b; 
double a; 
int c; 
}; 
#pragma pack(pop)

#pragma pack(8)
struct inst{
 char d;
 long e;
};

struct S2 {
 char a;
 struct inst b;
 long long c;
};
#pragma pack()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值