在32位机器上
设有以下说明和定义:
|
1
2
3
4
5
6
7
8
9
10
11
|
typedef
union { long
i; int
k[5]; char
c;}
DATE;struct
data { int
cat; DATE
cow; double
dog;}
too;DATE
max; |
首先共用体里面你们肯定都是明白的,DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20 。
但是到了结构体里面,其实它是这样的,首先一个Int,然后后面5个int,再然后是一个double,所以最大的成员长度是8不是20,然后6个int刚刚24,然后加上8是32,加上共用体是52,如果你把第一个Int cat去掉,你仍然会发现,结构体大小还是32,因为8个字节内存对齐,前面2个int一组,最后还单一个int也要占8个字节。
本文深入探讨了在C语言中使用结构体与共用体时,如何理解它们在内存中的布局,特别是通过一个具体例子展示了如何计算结构体和共用体的总内存大小。

1万+

被折叠的 条评论
为什么被折叠?



