union、struct、class占用的字节数 |
您所在的位置:网站首页 › c语言char所占字节数 › union、struct、class占用的字节数 |
内存对齐
在32位系统下,gcc的对齐方式为1,2,4,默认为4字节对齐。 在64为系统下,gcc的对齐方式为1,2,4,8,默认为8字节对齐。
union变量所占用的内存长度等于最长的成员的内存长度。 struct和class内存中存储形式一样(函数不占内存空间)。 union当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员; 4)其对齐方式要适合其中所有的成员; 下面解释这四条描述: 由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的。为了使得所有成员能够共享一段内存,因此该空间必须足够容纳这些成员中最宽的成员。对于这句“对齐方式要适合其中所有的成员”是指其必须符合所有成员的自身对齐方式。 下面举例说明: 如联合体 union U { char s[9]; int n; double d; };s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。然而其实际大小并不是9,用运算符sizeof测试其大小为16.这是因为这里存在字节对齐的问题,9既不能被4整除,也不能被8整除。因此补充字节到16,这样就符合所有成员的自身对齐了。从这里可以看出联合体所占的空间不仅取决于最宽成员,还跟所有成员有关系,即其大小必须满足两个条件: 1)大小足够容纳最宽的成员; 2)大小能被其包含的所有基本数据类型的大小所整除。 union联合体占用内存空间的大小的计算 1 代码 #include using namespace std; union A{ int a[5]; char b; double c; }; int main(){ cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |