• C++


    类的虚函数虚继承所占的空间


    本文地址: http://blog.csdn.net/caroline_wendy/article/details/24236469


    char占用一个字节, 但不满足4的倍数时, 会进行数据对齐, 使用4的倍数的字节(byte).


    GCC:

    GCC中, 不管是虚函数还是虚继承, 都须要将指针存储在虚函数表(virtual function table), 占用4个字节.


    继承会继承基类的数据, 和虚函数表, 即继承基类的空间.


    代码:

    /*
     * test.cpp
     *
     *  Created on: 2014.04.20
     *      Author: Spike
     */
    
    /*eclipse cdt, gcc 4.8.1*/
    
    #include <iostream>
    
    using namespace std;
    
    class A {
    	char k[5];
    public:
    	virtual void aa() {};
    };
    
    class B : virtual public A {
    	char j[6];
    public:
    	virtual void bb() {};
    };
    
    class C : virtual public B {
    	char i[7];
    public:
    	virtual void cc() {};
    };
    
    int main() {
    	std::cout << "sizeof(A) = " << sizeof(A) << std::endl;
    	std::cout << "sizeof(B) = " << sizeof(B) << std::endl;
    	std::cout << "sizeof(C) = " << sizeof(C) << std::endl;
    
    	return 0;
    }
    

    输出:

    sizeof(A) = 12
    sizeof(B) = 24
    sizeof(C) = 36

    VS:

    VS中, 正常情况下, 全部虚函数都写在一个虚函数表中, 即派生类使用基类的虚函数表, 不会新建字节的虚函数表;

    假设使用虚继承, 则派生类, 新建虚函数表和虚继承表, 即额外添加8个字节(两个表);


    输出:





  • 相关阅读:
    随便写的,关于外部提交按钮
    thinkPHP--empey标签
    ramdajs库应用场景
    数组常用用法--map,filter,reduce
    接口签名
    四种常见的 POST 提交数据方式
    localhost、127.0.0.1和0.0.0.0和本机IP的区别
    ftp与sftp
    本地已有项目上传git
    github和gitlab比较
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3751355.html
Copyright © 2020-2023  润新知