这篇文章主要介绍了C++结构体字节对齐和共用体大小,结构体内存对齐在笔试和面试中经常被问到,所以这篇文章做个总结,首先通过代码验证不同结构体的内存大小,需要的朋友可以参考下
代码运行的结果为:
可以明确,嵌套结构体的对齐数为所嵌套结构体的最大对齐数,所以Node1的对齐数为{1,4,1},Node2的对齐数为{1,4,8},最大对齐数分别为4和8,则代码里两个结构体的大小计算方式为:
- sizeof(Node1)= 1 + 3(浪费)+ 4 + 1 + 3(浪费) = 12
- sizeof(Node2)= 1 + 7(浪费)+ 12 + 4(浪费)+ 8 = 24
2、共用体的内存大小
对于以下共用体,读取它大小的代码如下:
#include <stdio.h>
union un1{
int val;
char c;
double d;
};
union un2{
int val;
char array[5];
};
int main(){
printf("un1 size = %d\n",sizeof(union un1));
printf("un2 size = %d\n",sizeof(union un2));
return 0;
}
代码运行结果为:
3、枚举的大小
这里顺带提一下枚举的内存大小,代码验证如下:
#include <stdio.h>
enum Colour {
RED,
GREEN,
BLUE
};
enum ProgramLanguage {
python = 0xffffffffff,
c = 8,
java
};
int main()
{
printf("Colour size = %d\n",sizeof(enum Colour));
printf("ProgramLanguage size = %d\n",sizeof(enum ProgramLanguage));
return 0;
}
代码运行结果为:
可见枚举类型的大小是编译器根据定义的值自行给定的,实际使用中很少会超出4字节大小。
到此这篇关于C++结构体字节对齐和共用体大小的文章就介绍到这了,更多相关结构体字节对齐和共用体大小内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C++结构体字节对齐和共用体大小


猜你喜欢
- ubuntu下C/C++获取剩余内存 2023-09-18
- C语言详解float类型在内存中的存储方式 2023-03-27
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C++ 数据结构超详细讲解顺序表 2023-03-25
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- Easyx实现扫雷游戏 2023-02-06