Q1. 结构体成员内存占用情况?
字节对齐规则:
- 结构体大小为结构体内成员大小最大值的整数倍;
- 结构体成员大小为当前成员相对于首地址偏移量的整数倍;
链接好文:
https://blog.csdn.net/qq_45303986/article/details/124210119
Q2. 结构体与联合体比较?
结构体定义:
用户自定义的可用的数据类型,允许存储不同类型的数据,结构体内成员按定义先后顺序存放;
联合体定义:
联合(共同)体是一种特殊的数据类型,允许在相同的内存位置存储不同数据类型的数据(但不同时),可以通过不同成员访问不同的存储空间;
其中,联合体所占内存大小为空间内最大内存成员的内存大小,联合体成员占用同一个内存空间;
typedef union _union_memory_t
{
uint16_t a;
uint8_t b;
uint32_t c;
uint8_t d;
uint32_t e;
}union_memory_t;
union_memory_t union_memory =
{
.a = 0x55,
};
int main(void)
{
uint8_t * point = NULL;
sizeof(union_memory_t);
printf("union_memory_t a = %d\n", union_memory.a);
printf("union_memory_t b = %d\n", union_memory.b);
printf("union_memory_t c = %d\n", union_memory.c);
printf("union_memory_t d = %d\n", union_memory.d);
printf("union_memory_t e = %d\n", union_memory.e);
return 0;
}Terminal Result:
union_memory_t a = 85
union_memory_t b = 85
union_memory_t c = 85
union_memory_t d = 85
union_memory_t e = 85链接好文:
https://blog.csdn.net/qq_46731045/article/details/125822597
Q3. 指针占用几个字节?
指针概念:
是C语言中的一种数据类型,是一个值为内存地址的变量(或数据对象)。
指针使用:
指针的值是它所指向对象的地址;
在指针前面使用*运算符可以得到该指针所指向对象的值;
指针加1,指针的值递增它所指向类型的大小(以字节为单位);
字节占用:
不同CPU架构指针变量所占用的存储单元长度不同,比如32/64位系统,指针所占用的字节数分别为4和8字节;
int main(void)
{
uint8_t * point = NULL;
uint8_t data = 0x55;
point = &data;
printf("point sizeof = %d", sizeof(point));
return 0;
}Terminal Result:
point sizeof = 8