zoukankan      html  css  js  c++  java
  • 位域结构体的字节对齐


    使用位域的主要目的是压缩存储,其大致规则为:
     一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空
    间不够存放另一位域时,应从下一单元起存放该位域。
     如果相邻位域字段的类型相同,且其位宽之和小于类型的 sizeof 大小,则
    后面的字段将紧邻前一个字段存储,直到不能容纳为止。
     如果相邻位域字段的类型相同,但其位宽之和大于类型的 sizeof 大小,则
    后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍。
     如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,vc6.0 采
    取不压缩方式,Dev-C++和gcc 采取压缩方式。
     如果位域字段之间穿插着非位域字段,则不进行压缩。

    例如:

     1 struct A 
     2 { 
     3     int a1 : 
     4     int a2 : 
     5     char b; 
     6     int c : 4
     7     short d; 
     8 }B;
     9 
    10 a)48 或16字节对齐 
    11 a1+a2: 4 * 0 = 0 
    12 b:     4 * 1 = 4 
    13 c:     4 * 2 = 8 
    14 d:     2 * 6 = 12              sizeof(B) = 16 
    15 
    16  b) 2字节对齐 
    17 a1+a2: 2 * 0 = 0 (int为4 字节, 大于对齐字节(2 字节),以2 字节计算) 
    18 b:     1 * 4 = 4 
    19 c:     2 * 3 = 6 (int 为4 字节, 大于对齐字节(2 字节),以2 字节计算) 
    20 d:    2 * 5 = 10 
    21 
    22 c)1字节对齐 
    23 a1+a2 = 14位,小于4 字节(int 类型为4 字节),所以,a1 和a2放在一起 
    24 sizeof(B) = 4 + 1 + 4 + 2 = 11 
  • 相关阅读:
    Python判断列表是否已排序的各种方法及其性能分析
    Python实现C代码统计工具(四)
    Python代码统计工具
    Python实现C代码统计工具(三)
    Python实现C代码统计工具(一)
    Python标准输出重定向
    为C函数自动添加跟踪语句
    Python2.7字符编码详解
    Python实现Linux命令xxd -i功能
    1124 Raffle for Weibo Followers (20 分)
  • 原文地址:https://www.cnblogs.com/yyx1-1/p/6178529.html
Copyright © 2011-2022 走看看