C++ sizeof 实例解析

 更新时间:2013年07月20日 15:57:25   作者:  
下面5个列子针对C++,没有涉及到sizeof字节对齐及基本数据类型即只针对C++特有,并且针对的是32位机

在C++中使用sizeof要比C复杂很多,因为C++类中有static静态变量,virtual虚函数,还有继承、派生等。sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。
sizeof使用形式有三种:sizeof(var_name)或sizeof var_name或sizeof(var_type)。

【例1】:(列子中忽略构造及析构函数)

复制代码 代码如下:

class A 

    public:
        void hello(){} 
}; 
sizeof(A)= 1;

肯定不是零。举个反例,如果是零的话,声明一个class A a[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]…了。

因为A是空类,占字节为1是为了区分两个不同的对象,也可以看做是占位符,该字节的地址也就是对象的地址。但是这里的1也不是绝对的,只是编译器这样设定而已。
【例2】:

复制代码 代码如下:

class B 

    public:
         void hello(){}
         static int i;
}; 
    sizeof(B) = 1;

因为static变量为类中共享,在静态区分配空间,在编译时就分配了空间,不占类内存。
【例3】:
复制代码 代码如下:

classC

    public:
        virtual void hello(){}
};
sizeof(C)= 4;

B类中有虚函数,相应的会有虚表指针存在,占4个字节,恰好是一个指针的空间。同时,如果有多个virtual函数或有多个类继承了C类,虚函数也只占4个字节,如【例4】:
【例4】:
复制代码 代码如下:

class D : public C
{
    public:
        virtual void world(){}
        virtual  void nihao(){}
};
sizeof(D)= 4;

【例5】:
复制代码 代码如下:

class E

    public:
          virtual void hello(){}
          virtual void world(){}
          staticint i;
          static int j;
          int k;
};
     sizeof(E) = 8;

希望对你有所帮助。

相关文章

  • C语言一看就懂的指针与结构体介绍

    C语言一看就懂的指针与结构体介绍

    指针提供了对地址操作的一种方法,因此,使用指针可使得C语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作数组。C数组允许定义可存储相同类型数据项的变量,结构是C编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项
    2022-04-04
  • 一篇文章让你彻底明白c++11增加的变参数模板

    一篇文章让你彻底明白c++11增加的变参数模板

    C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数,这篇文章主要给大家详细介绍了关于c++11增加的变参数模板的相关资料,需要的朋友可以参考下
    2021-08-08
  • QT5 Thread线程的具体实现

    QT5 Thread线程的具体实现

    本文主要介绍了QT5 Thread线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 详解C++中的this指针与常对象

    详解C++中的this指针与常对象

    这篇文章主要介绍了详解C++中的this指针与常对象,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++实现的大数相乘算法示例

    C++实现的大数相乘算法示例

    这篇文章主要介绍了C++实现的大数相乘算法,结合实例形式分析了C++大数相乘的概念、原理及代码实现技巧,需要的朋友可以参考下
    2017-08-08
  • 一篇文章带你了解C++模板编程详解

    一篇文章带你了解C++模板编程详解

    这篇文章主要介绍了C++的模板,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • C++求所有顶点之间的最短路径(用Floyd算法)

    C++求所有顶点之间的最短路径(用Floyd算法)

    这篇文章主要为大家详细介绍了C++求所有顶点之间的最短路径,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 给C语言初学者的学习建议

    给C语言初学者的学习建议

    在本篇文章里小编给大家分享的是关于C语言学习建议的相关内容,有兴趣的朋友们可以学习参考下。
    2020-06-06
  • C++超详细讲解字符串类

    C++超详细讲解字符串类

    在C++中只有一个字符串类,即basic_string,其管理着一个 '\0' 结尾的字符数组。头文件:#include <string>,string类支持两种输入方式:cin方式和getline()方式
    2022-06-06
  • C++将字符串格式化的几种方式总结

    C++将字符串格式化的几种方式总结

    这篇文章主要介绍了C++将字符串格式化的几种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论