C++之类所占内存空间

本文探讨了C++中类对象占用的内存空间大小,包括空类、含有不同数据成员的类、包含静态数据成员及成员函数的类,并解释了内存分配原则。

由于类的成员较多,所以很容易将类对象到底占多少内存弄混,所以自己写这篇文章,看下编译器到底给类对象分配多少内存空间。

一、类为空的情况下,对象所占内存空间

#include 
using namespace std;
class A
{
};
int main()
{
    A  a;
    cout<

运行结果为1。
那为什类对象为空,还会占用内存空间呢?
其实很容易理解,C++要求所有的每个实例在内存中有独一无二的地址,想想也是,如果没有独一无二的地址,那程序怎么找到那个变量呢。
像上例中的对象没有成员,那咋办呢,那编译器就只能给类对象隐式添加一个字节,这样就有了内存地址。

二、只有普通数据成员时,对象所占内存空间

#include 
using namespace std;
class A
{
    public:int a;
};
int main()
{
    A  a;
    cout<
运行结果为4。
当类定义中只有数据成员时,对象所占内存空间为所有数据成员所占空间之和。但是C++标准中要求int型的最小存储位数是16位,也就是2个字节。可是这里对象占4个字节。
感到疑惑,所有又弄了个例子
#include 
using namespace std;
class A
{
    public:int a;
    char b;
    long c;
    bool d;
};
int main()
{
    A  a;
    cout<
这回运行结果是16,那就可以这样理解了,类对象中的数据成员一个最少占用4个字节,为什么说最少呢,因为又弄了个例子。
#include 
using namespace std;
class A
{
    public:int a;
    char b;
    long c;
    bool d;
    long double e;
};
int main()
{
    A  a;
    cout<
运行结果是28,不管怎样,数据成员所占空间最少为4个字节,如果比4个字节大,那也是4的倍数。这就是对齐原则了。

三、那有了静态数据成员那会怎样呢

#include 
using namespace std;
class A
{
    public:int a;
    char b;
    long c;
    bool d;
    long double e;
    static int f;
};
int main()
{
    A  a;
    cout<
运行结果还是28,可见静态数据成员属于类,而不是某一特定对象,也并不存储在某一特定对象中,不占内存空间。

四、加入普通成员函数的类对象

#include 
using namespace std;
class A
{
    public:int a;
    char b;
    long c;
    bool d;
    long double e;
    static int f;
    int compare(int i,int j){return i
运行结果还是28,所以说普通成员函数是不占内存空间的。


五、接下来会写静态成员函数,虚成员函数,子类对象的内存空间问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值