c语言字符对齐的作用,C语言中字符对齐(内存对齐)问题(测试环境visual studio 2010)...

本文详细介绍了C/C++中结构体(struct)与联合体(union)的内存对齐方式,包括自然对界的概念及如何通过#pragma pack自定义对齐方式。通过对不同类型的变量在结构体与联合体中的布局分析,揭示了对齐规则如何影响数据结构的大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自然对界:一个变量的内存地址正好位于它长度的整数倍

有关结构的字符对齐方式:

结构体内的变量按照自然对界对齐,数组如char a[10]的自然对界是1Byte。

结构体按照结构体内最大的自然对界进行对齐

例子:

struct test{

int g;

char w[10];

double l;

char gwl;

};

int _tmain(int argc, _TCHAR* argv[])

{

printf("%d",sizeof(struct test));

getchar();

return 0;

}运行结果:32

32 = 4+10+(2+8)+1+7

有关union的字符对齐方式:

按照union内成员最大的自然对界进行对齐

整个union大小为占空间最大的成员按上述对齐方式对齐后的大小

例子:

union test{

int g;

char w[10];

double l;

char gwl;

};

int _tmain(int argc, _TCHAR* argv[])

{

printf("%d",sizeof(union test));

getchar();

return 0;

}运行结果:16

按照double的自然对界进行对齐,union的大小为成员char w[10]的大小

关于自己定义字符对齐方式

#pragma pack(n)

.

.代码

.

#pragma pack()//取消自定义对齐方式结构体中成员对齐方式为n与自然对界中较小的(union相同,最后取成员中最大的对齐方式)

例子:

#pragma pack(2)

struct test{

int g;

char w[10];

double l;

char gwl;

};

int _tmain(int argc, _TCHAR* argv[])

{

printf("%d",sizeof(struct test));

getchar();

return 0;

}

#pragma pack()运行结果:24

24 = 4+10+8+1+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值