sizeof(struct bs) 的大小之所以为 4,而不是 3,是因为要将内存对齐到 4 个字节,以便提高存取效率。如果将成员 m 的位宽改为 22,那么输出结果将会是 8,因为 22+12 = 34,大于 32,n 会从新的位置开始存储,相对 m 的偏移量是 sizeof(unsigned int),也即 4 个字节。
m 、ch、p 的长度分别是 4、1、4 个字节,共计占用 9 个字节内存,只所以在 VC/VS 下的输出结果是 12,还是因为要将内存对齐(ch 单独占用 4 个字节),以便提高存取效率。3) 如果成员之间穿插着非位域成员,那么不会进行压缩。例如对于下面的 bs:纯文本复制
欢迎光临 教育改变生活 (http://bbs.goldoar.com/) | Powered by Discuz! X3.2 |