C++ -- 关于类对象的内存分析

本文探讨了C++类对象的内存分析,包括没有数据成员、只有成员函数、含有不同数据成员、带有虚函数以及继承场景下的内存大小。通过实例代码在Linux 64 bit系统上使用GCC编译,解释了编译器如何处理对象内存,如内存对齐、虚函数指针等。同时,提出了多继承和虚继承等更深入的内存问题。
摘要由CSDN通过智能技术生成

C++是一种可以操作内存的编程语言,虽然说类对象的内存布局会随着编译器以及运行环境的影响而受到变化。但是通过一些简单的分析还是可以加深自己对语言本身的理解。

我们来看几种情况:读者可以不看下面的具体分析,只是询问一下自己,它们的大小,你知道吗?

  • 没有任何数据成员的类
  • 只有成员函数但没有数据成员的类
  • 拥有一个整形数的类
  • 拥有一个整形和字符整形(char)的类
  • 带有虚函数的类
  • 继承拥有虚函数父类的子类

先贴代码:

#include <iostream>
#include <string>

class Foo
{
};

class FooWithFunction
{
};

class FooWithInt
{
    int i;
};

class FooWithIntChar
{
    int i;
    char c;
};

class Test
{
  public:
    virtual void foo() {}
};

class Derived : public Test
{
  public:
    virtual void derivedFoo() {}
};



int main()
{
    std::cout << "Foo size: \t\t\t" << sizeof(Foo) << std::endl;
    std::cout << "FooWithFunction size: \t\t" << sizeof(FooWithFunction) << std::endl;
    std::cout << "FooWithInt size: \t\t" << siz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值