观察如下代码片段:\nunion U{\nbool flag1, flag2, flag3, flag4, flag5;\nsigned short a;\nunsigned short b;\nenum E{\nCardA = 0, CardB = 1,\nCardC = 2, CardD = 142857\n} e;\n} u;\n其中, sizeof(u) 的值为( )。\nA. 4 B. 8\nC. 13 D. 16\n内容:sizeof(u)的值为D. 16。\n\n根据C++的内存对齐规则,bool类型通常占用1个字节,signed short占用2个字节,unsigned short占用2个字节,enum类型的大小取决于其取值范围,通常为4个字节。\n\n在这个代码片段中,bool类型的flag1到flag5共占用5个字节,signed short类型的a占用2个字节,unsigned short类型的b占用2个字节,enum类型的E占用4个字节。所以总共的大小为5个字节 + 2个字节 + 2个字节 + 4个字节 = 13个字节。\n\n然而,根据内存对齐规则,结构体或联合体的大小通常会被对齐到最近的对齐边界的整数倍。在这个代码片段中,最大的成员是enum类型的E,占用4个字节,所以联合体的大小会被对齐到4的倍数,即16个字节。因此,sizeof(u)的值为16。

C++ Union Size: sizeof(u) Explained - Memory Alignment and Padding

原文地址: https://www.cveoy.top/t/topic/qvjL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录