[转]结构体对齐,#pragma pack

 

一、结构体对齐

 

首先通过一个例子说明结构体对齐,可以看到,下面这个结构体占32字节(32位)

 

typedef struct {
	double d;
	short s;
	int i;
	char c;
	short ss;
	char cc;
	int ii;
} A;

 

在这里插入图片描述

 

这个是8字节默认对齐。

 

二、#pragma pack

 

可以使用 #pragma pack(push, 4) 将对齐数改成4,那么结构体大小就会变成28字节。

 

#pragma pack(push, 4)
typedef struct {
	double d;
	short s;
	int i;
	char c;
	short ss;
	char cc;
	int ii;
} A;
#pragma pack(pop)

 

在这里插入图片描述

 

对齐从8改成了4,虽然成员没变,但是大小变成了28. #pragma pack(push, 4) 和 #pragma pack(pop) 是设置和恢复对齐。#pragma pack(show) 可以在警告输出栏打印当前对齐数。

 

在这里插入图片描述

 

最后请读者算一下对齐为16会怎样?

 

#include <stdio.h>

#pragma pack(push, 16)
typedef struct {
	double d;
	short s;
	int i;
	char c;
	short ss;
	char cc;
	int ii;
} A;
#pragma pack(pop)

int main()
{
	printf("%d\n", sizeof(A));
	return 0;
}

 

分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线
分割线

 

答案就是32

 

在这里插入图片描述


---------------------
作者:hambaga
来源:CSDN
原文:https://blog.csdn.net/Kwansy/article/details/109612927
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值