• sizeof


    sizeof返回对象或类型名的长度,返回值类型为size_t,长度的单位是字节。

    sizeof操作符在编译时已经得到了结果,即sizeof表达式的结果是编译时常量,字节对齐是编译时决定的。

                              

          32位机        64位机     
             bool                1 byte     1 byte  
             char     1 byte     1 byte
             short      2 byte      2 byte
              int      4 byte      4 byte
              long(全字长)      4 byte      8 byte
              指针(全字长)      4 byte      8 byte
             float      4 byte      4 byte
            double      8 byte      8 byte
            string      32       32

       字长:指明整数和指针数据的标称大小。

    sizeof 计算栈中分配的大小,对于静态变量和全局变量都是存放在全局数据区的,不做计算。

    1) 对函数使用sizeof,在编译阶段会被函数返回值的类型取代。

    2) 空类的sizeof是1(因为我们声明该类型的实例的时候,它必须在内存中占有一定的空间);

          类中只有构造函数和析构函数,对类求sizeof还是1(调用构造函数和析构函数只需知道函数的地址即可,而这些函数地址只与类型相关,而与类型的实例无关);

          类中有若干虚函数,则类的sizeof是4或者8,此值是指针的sizeof 大小(因为有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针);

    3) 任何情况下,数组作为函数的参数,都退化为指针。

    4)空类的sizeof为1,单一继承的空类的sizeof也是1,多重继承的空类空间还是1;

         虚继承涉及虚表(虚指针),它的sizeof是4;

    5)关于数据对齐:

         当结构体内的元素的长度都小于处理器的位数的时候,便以结构体里面最长的数据元素为对齐单位,则结构体的sizeof一定是最长的数据元素的整数倍;

         如果结构体里存在长度大于处理器位数的元素,就以处理器的位数为对齐单位;

         但是结构体内类型相同的连续元素将在连续的空间内(有时候不一定类型相同也可以在连续空间)。

         #pragma  pack(4),则强制以32位为单位对齐。

    6)结构体内的静态变量static是存放在全局数据区的,而sizeof计算栈中分配的大小,不会计算在内。

    7)  对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。

        

  • 相关阅读:
    mysql innodb存储引擎和myisam引擎
    php 5.5 xhprof for windows
    sqlserver 2012 部署详解
    Oracle ASM 常用命令
    oracle 基础知识(十四)----索引扫描
    oracle 基础知识(十三)----执行计划
    Oracle DG --检查
    Oracle broker--详解
    初识正则表达式
    python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3783467.html
Copyright © 2020-2023  润新知