struct、union的对齐问题
2016-09-07 19:58
211 查看
#include <stdio.h> /*32位机器访问起始地址是4的倍数处的内存比较方便 min(系统默认(4),数据成员自身长度)*/ struct node1{ //sizeof(struct node1)=8; char a1; //1 short b1; //2 int c1; //4 }; struct node2{ //sizeof(struct node2)=12; char a2; //1 int c2; //4 short b2; //2 }; struct id_all_char{// char id3[3]; //3 char ver; //1 char revision;//1 char flag; //1 char size[4]; //4 }; struct idid{ char id3[3]; char ver; char revision; char flag; int size; }__attribute__((packed)); //__attribute__((packed))用于告诉编译器不要对其进行内存对齐! struct all_short{//sizeof(struct all_short)=6;而不是8!因为a,b,c三个都是short,所以a,b,c最大的数据类型是short,所以min(4,2)=2(short),所以最后整个struct按照short型(长度为2)对齐 short a;//2 short b;//2 short c;//2 }; struct mixed{ char a; //1 short z; //2 int i; //4 char e; //1 char s; //1 }; struct mixed_se{ int s; short w; double d; char e; short i; }; union _u{ char e[3]; short f; int s; double z; //8 }; int main(void) { printf("sizeof(struct node1)=%d\nsizeof(struct node2)=%d\n",sizeof(struct node1),sizeof(struct node2)); printf("sizeof(struct all_short)=%d\n",sizeof(struct all_short)); printf("sizeof(struct id_all_char)=%d\n",sizeof(struct id_all_char)); printf("sizeof(struct idid)=%d\n",sizeof(struct idid)); printf("sizeof(struct mixed)=%d\n",sizeof(struct mixed)); printf("sizeof(struct mixed_se)=%d\n",sizeof(struct mixed_se)); printf("sizeof(union _u)=%d\n",sizeof(union _u)); return 0; }
运行结果:
相关文章推荐
- C#中struct和class的区别详解
- 深入剖析C++中的struct结构体字节对齐
- C++ 关于STL中sort()对struct排序的方法
- C# Struct的内存布局问题解答
- 深入C++中struct与class的区别分析
- 浅析c与c++中struct的区别
- c++中struct使用注意事项
- 深入解析C#编程中struct所定义的结构
- 浅析内存对齐与ANSI C中struct型数据的内存布局
- php读取二进制流(C语言结构体struct数据文件)的深入解析
- C语言中结构体(struct)的几种初始化方法
- 详解C++程序中定义struct结构体的方法
- Go语言struct类型介绍
- 在Python的struct模块中进行数据格式转换的方法
- Python struct模块解析
- Go语言中struct的匿名属性特征实例分析
- 优化结构体中元素的布局
- ext关于session失效的处理
- Python 10.4 struct
- typedef struct与struct的区别