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

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

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

结构体内的变量按照自然对界对齐,数组如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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值