结构体的大小
来源:互联网 发布:爱思唯尔数据库英文 编辑:程序博客网 时间:2024/05/02 07:17
当定义了结构体以后,编译器在编译的时候遵循两条原则:
1、结构体变量中成员的偏移量必须是成员大小的整数倍。(0被认为是任何数的整数倍)
2、结构体的大小必须是所有成员大小的整数倍。
e.g.
strut c
{
int i;
char x;
int j;
};
其中,i的偏移量是0,x的偏移量是sizeof(i) + 0 = 4, j的偏移量是 4 + 1 = 5。
所以根据第一条,j的偏移量在编译的时候被改成5+3=8, 所以c的大小是8 + 4 = 12。
注意也有时候是满足第一条,不满足第二条的时候,尤其是在只有两个成员的时候。
结构体中带有结构体的情况是不一样的,结构体中若还有结构体,就直接将结构体展开,但是展开的结构体中第一个成员的偏移量必须是自己所在结构体(原来的)中最大的成员的整数倍。
但是需要注意的是其会根据编译器的不同有所不同,以上情况在linux g++上测试通过。
注意,若结构体中有函数的话,只要不是虚函数,其都是不占内存的,虚函数需要占4个字节的空间。
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 结构体的大小
- 关于结构体的大小
- 计算结构体的大小
- 结构体大小的计算
- 关于结构体的大小
- 这个结构体的大小??
- 计算结构体的大小
- Oracle在VMware上完美运行的10大理由
- 竞赛试题
- 随意注释掉代码的代码猴子。
- 关于联合体union的详细解释
- 算法设计
- 结构体的大小
- Android Audio代码分析23 - attachAuxEffect函数
- jquery表单验证实例 非常好
- Java/JSP中文乱码问题
- Servlet文件下载
- 3DS Max建模 植物的触碰效果
- epo.c
- EditText输入字符控制(二)
- C#语法