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

  • 相关阅读:
    [To be translated] Nova:libvirt image 的生命周期
    Neutron 理解(5):Neutron 是如何向 Nova 虚机分配固定IP地址的 (How Neutron Allocates Fixed IPs to Nova Instance)
    Cinder 调试
    SSH 无密码访问其它机器 和 Windows 上 putty 无密码访问 Linux 机器
    Hadoop 数据库
    Hadoop 分布式文件系统
    C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
    Google Scholar 论文参考文献的自动生成
    Linux shell ${}简单用法
    C/C++ 获取目录下的文件列表信息
  • 原文地址:https://www.cnblogs.com/kundij/p/1800994.html
Copyright © 2011-2022 走看看