一、结构体对齐
首先通过一个例子说明结构体对齐,可以看到,下面这个结构体占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博客文章一键转载插件