1、对象分布图

2、解析

每个类的大小只有其成员变量大小,其中包括:类成员属性,虚函数指针;

而其他没有如:静态变量【静态区】,普通函数、静态函数【代码区】

3、总结

类对象的sizeof只包含成员变量的大小,不包含函数的大小【就跟结构体一样】,因为函数被放在了代码区,类对象调用代码的时候会把对象的指针传到函数那里,函数根据这个对象指针访问对象的内部属性

4、代码

class A{
private:
int a; //4 bytes
char b; //4 bytes
int c; //4 bytes
const int d=;//4 bytes
static int e; //0 bytes,存储在全局/静态区
public:
virtual void vTest() //4 bytes,与返回值无关,只要有虚函数则有虚函数指针,占4bytes
{ }
static void sTest() //0 bytes,存储在公共代码区,参数个数为0
{ }
void test() //0 bytes,存储在公共代码区,参数个数为1【对象的this指针】
{ }
};
int A::e;

ps:C中空结构体sizeof为0;C++中空结构体和空类sizeof为1【C++原则:任何不同的对象不能拥有相同的内存地址。如果空类对象大小为0,那么此类数组中的各个对象的地址将会一致,明显违反了此原则】

C++类成员存储大小的更多相关文章

  1. c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用

    c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用 c++不会像上图那样为每一个对象的成员变量和成员函数开辟内存空间, 而是像下图那样,只为每一个对象的成员变量开辟空间.成员 ...

  2. static 成员变量、static 成员函数、类/对象的大小

    一.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量 ...

  3. C/C++(C++返回对象与应用区别,类成员的存储)

    返回对象与应用区别: 拷贝构造器发生的时机: 1.构造新对象 A a, A b = a; 2.传参或返回对象 对于普通变量来说,传引用效果不是很明显,对于类对象而言,传对象效果很高. 传引用等价于扩大 ...

  4. 类成员函数指针的特殊之处(成员函数指针不是指针,内含一个结构体,需要存储更多的信息才能知道自己是否virtual函数)

    下面讨论的都是类的非静态成员函数. 类成员函数指针的声明及调用: 1 2 3 4 5 6 7 //pr是指向Base类里的非静态成员函数的指针 //其行参为(int, int),返回值为void vo ...

  5. Objective-C类成员变量深度剖析

    目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...

  6. C++类的存储(部分可用与c的结构体)

    c++中最重要的就是类,那么给你一个类的对象,你知道它在内存中如何存储的吗?它占内存中多少个字节? 首先确定类的构成: 1,数据成员:可以是内置类型,类类型. 2,函数成员:虚函数,非虚函数 1)数据 ...

  7. 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)

    本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上?             成员函数可以被看作是类 ...

  8. C++类成员空间分配和虚函数表

    最近在自学python,看到继承和类,就顺便复习了C++的类和继承等方面的知识. 先看Base基类 class Base { private: virtual void display() { cou ...

  9. Objective-C类成员变量深度剖析--oc对象内存模型

    目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...

随机推荐

  1. PHP导出数据库sql文件,add和update

    /*** 导出sql文件*/public function exportSql(){   //需要导出的数据库表存入到数组当中   $tables =array("T_CRM_QUEUE_F ...

  2. Vue之@click、事件修饰符@click.stop与@click.prevent、按键修饰符@keyup.enter

    1.绑定监听@click: (以监听click为例,其他如keyup,用法类似)  v-on:click="fun"  @click="fun"  @click ...

  3. python - django (创建到运行流程)

    a = 0 """ 1. 创建 Django 操作文件 a. cmd 中选择路径: cd C:\Users\ad\PycharmProjects\index\1\文件名 ...

  4. 2、Hadoop 2.X 概述及生态系统

    Hadoop官网 http://hadoop.apache.org/ Hadoop来源 GFS -> HDFS MapReduce -> MapReduce BigTable -> ...

  5. map json 字符串 对象之间的相互转化

    1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.pars ...

  6. 在CentOS7上面搭建GitLab服务器

    首先要在CentOS系统上面安装所需的依赖:ssh.防火墙.postfix(用于邮件通知).wegt,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问. 1.安装SSH协议 安装命令:sud ...

  7. Linux shell - 按时间和文件大小排序显示文件

    在工作中有这样的情况,需要显示所有的文件,按照时间先后或者文件大小先后排序显示 命令:ls 1.按时间排序显示文件 1 test@> ll -rt 2.按文件大小排序显示文件(文件大小单位:k, ...

  8. 鼠标经过提高层级案例(margin,相对定位,z-index)

    <body> <ul> <li class="box1">1</li> <li class="box2"& ...

  9. Linux工具[转]

    ref: https://github.com/linw7/Skill-Tree/blob/master/Linux%E5%B7%A5%E5%85%B7.md Linux工具 Linux下还是有很多超 ...

  10. [Shell]Docker remote api未授权访问漏洞(Port=2375)

    0x01 简介 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. Docke ...