zoukankan      html  css  js  c++  java
  • 再谈结构体的大小

          今天上班时,在与同事讨论数据字节对齐时,在谈到如果结构体中单独包含一个bool类型的成员时,这个结构体的大小是多少?那时第一直觉就是,虽然bool类型的大小是1个字节,但编译器默认按4个字节对,所以单独包含一个bool类型,结构体大小应该是4个字节。后来同事亲手试验了一下,想不到竟然是1个字节大小。

         因些自己就亲手写个几个结构体进行试验,以下是在VS2003进行默认编译的,列举如下:

    1.  

    struct TEST

      {

         bool  bMember1;

      }

    结果: sizeof(TEST) =  1;

    2.  

    struct TEST

      {

         bool  bMember1;

         int    nMember2;

      }

    结果: sizeof(TEST) =  8;

    3.

    struct TEST

      {

         bool  bMember1;

         int    nMember2;

         bool  bMember3;

      }

    结果: sizeof(TEST) =  12;

    4.

    struct TEST

      {

         bool  bMember1;

         bool  bMember3;

         int    nMember2;

         

      }

    结果: sizeof(TEST) =  8;

    5.

    struct TEST

      {

         int    nMember2;

         bool  bMember1;

         bool  bMember3;

         

      }

    结果: sizeof(TEST) =  8;

    6.

    struct TEST

      {

          bool  bMember1;

         WORD    wMember2;

         bool  bMember3;

      }

    结果: sizeof(TEST) =  6;

    7.

    struct TEST

      {

         WORD    wMember2;

         bool  bMember3;

         bool  bMember1;

      }

    结果: sizeof(TEST) =  4;

    8.

    struct TEST

      {

         bool  bMember3;

         bool  bMember1;

         WORD    wMember2;

        

      }

    结果: sizeof(TEST) =  4;

    9.

    struct TEST

      {

         bool  bMember3;

         bool  bMember1;

         __int64  n64Member2;

        

      }

    结果: sizeof(TEST) =  16;

    10.

    struct TEST

      {

          bool  bMember3;

          __int64  n64Member2;

          bool  bMember1;

        

      }

    结果: sizeof(TEST) =  24;

    11.

    struct TEST

      {

         

          __int64  n64Member2;

          bool  bMember1;

         bool  bMember3;    

      }

    结果: sizeof(TEST) =  16;

    12.

    struct TEST

      {

         

         bool  bMember1;

         WORD wMember4;

         bool  bMember3;

         int nMember5;

          __int64  n64Member2;

              

      }

    结果: sizeof(TEST) =  24;

    由上可见 结构体或者类的自身对齐值是其成员中自身对齐值最大的那个值。
    本文最后附带关于字节对齐网上一篇写得不错的文章:

    http://www.yuanma.org/data/2006/0723/article_1213.htm

  • 相关阅读:
    知乎神回复:代码之间为什么要加空格?这个问题我是这样理解的!
    经验分享:一个 30 岁的人是如何转行做程序员,进入IT行业的?
    对于程序员来说,学历真的重要吗?为何都是高学历混的风生水起?
    教材、教参、教案有哪些区别?
    教参是什么
    教师面试指要
    教师资格证结构化面试是什么?会怎么考查?
    教师资格证面试试讲时可以戴手表吗
    讲师面试流程及试讲指导
    教师资格面试:试讲和说课的区别
  • 原文地址:https://www.cnblogs.com/kundij/p/1800994.html
Copyright © 2011-2022 走看看