zoukankan      html  css  js  c++  java
  • 结构体 对齐的问题

    以前没注意过,今天遇到这个问题,举例如下:

    环境vs2005,c++

    typedef struct  {

      int iFileCode;      //文件标识
      double dbMMax;

    } SHPHEADER1

     //获得索引文件记录偏移量相对文件头
     if (iRecord == 1 )
      iOffset = sizeof(SHPHEADER1);

    iOffset  = 16,

    如果在.h文件中加入#pragma pack(4) ,则iOffset  =12,具体原因,看帖子

    http://topic.csdn.net/t/20050321/13/3868040.html#

    11 楼hofer_song(逯爻(虫))回复于 2005-03-21 14:52:27 得分 28

    (引用)  
      “成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.”

    13 楼hofer_song(逯爻(虫))回复于 2005-03-21 15:07:05 得分 0

    结构体A中有3个short类型变量,各自以2字节对齐,结构体对齐参数按默认的8字节对齐,则a1,a2,a3都取2字节对齐,则sizeof(A)为6,其也是2的整数倍;  
      B中a1为4字节对齐,a2为2字节对齐,结构体默认对齐参数为8,则a1取4字节对齐,a2取2字节对齐,结构体大小6字节,6不为4的整数倍,补空字节,增到8时,符合所有条件,则sizeof(B)为8;

  • 相关阅读:
    传球游戏(NOIP2008 普及组第三题)
    立体图(NOIP2008 普及组第四题)
    多项式输出(NOIP2009 普及组第一题)
    分数线划定(NOIP2009 普及组第二题)
    第5到8章
    第四章总结
    实验九
    实验五
    实验四
    实验三
  • 原文地址:https://www.cnblogs.com/8586/p/1371941.html
Copyright © 2011-2022 走看看