未对齐时的结构体大小
#include <stdio.h>
#include <stdint.h>
struct aa {
uint8_t a;
uint16_t b;
uint8_t c;
};
int main(int argc, char **argv)
{
printf("struct size=%d\n", sizeof(struct aa));
}
结果
[~/test]$ gcc test.c
[~/test]$ ./a.out
struct size=6
对齐后的结构体大小
使用GUN关键字
attribute
((packed))
#include <stdio.h>
#include <stdint.h>
#ifdef __GNUC__
#define STRUCT_PACKED __attribute__ ((packed))
#else
#define STRUCT_PACKED
#endif
struct aa {
uint8_t a;
uint16_t b;
uint8_t c;
} STRUCT_PACKED;
int main(int argc, char **argv)
{
printf("struct size=%d\n", sizeof(struct aa));
}
结果
[~/test]$ gcc test.c
[~/test]$ ./a.out
struct size=4
使用#pragma pack(1)
#include <stdio.h>
#include <stdint.h>
#pragma pack(1) // 让编译器做1字节对齐
struct aa {
uint8_t a;
uint16_t b;
uint8_t c;
};
#pragma pack() // 取消1字节对齐,恢复为默认对齐
int main(int argc, char **argv)
{
printf("struct size=%d\n", sizeof(struct aa));
}
结果
[~/test]$ gcc test.c
[~/test]$ ./a.out
struct size=4
版权声明:本文为a987860319原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。