C++类成员变量和成员函数在内存上的区别

本文解释了C++中对象内存分配规则,包括非静态成员变量与静态成员的区别,以及类中不同类型的成员如何影响实例化对象的内存占用。特别提到空类实例化占用1字节,用于唯一标识,而非静态成员变量决定对象的实际大小。
摘要由CSDN通过智能技术生成

结论:

非静态成员变量:属于对象,随着对象的建立而分配内存,全局对象和静态对象则存储在全局区,局部对象则存储在栈区,动态对象则存储在堆区。

静态成员变量:属于类,存储在全局区。

非静态成员函数:属于类,存储在代码区。

静态成员函数:属于类,存储在代码区。

案列:

tips:创建类不会分配内存,只有在实例化对象时才分配内存。

1、当类是空类时,实例化的对象占几个字节?(1 个字节)

class Person {   //空类
    
};
Person p;    //对象p占 1 个字节

解释:C++编译器会给每个空对象都分配 1 字节的内存空间,目的是区分空对象之间所占用内存的位置。   // 比如当我创建了多个空对象时,Person p1, p2, p3... 若不给它们分配内存空间,则编译器就无法区分空对象,只有给每个空对象一个位置,编译器才能准确区分。( 因为每个对象在内存中的位置必须是独一无二的,若不分配内存,可以理解为多个对象同时在一块内存中,编译器不知道该返回哪一个,虽然这样理解是不对的 )

2、类中有非静态成员变量(普通成员变量),实例化的对象占几个字节?

class Person {
    int m_A;   //普通成员变量
};
Person p;   //对象p占 4 个字节

对象所占的内存空间 由类中 普通成员变量 所占内存空间 确定。

如上面 int 类型占 4 个字节,所以对象也占 4 个字节,同理若有两个 int 类型的普通成员变量,则对象应占 8 个字节的内存空间。

3、类中还有其他成员变量或成员函数时,实例化的对象占几个字节?

class Person {
    int m_A;                //普通成员变量  属于对象
    static int m_B;         //静态成员变量  属于类
    void func(){ }          //普通成员函数  属于类
    static void func(){ }   //静态成员函数  属于类
};
Person p;   //对象p占 4 个字节

解释:最开始的结论已经给出:只有普通成员变量是属于对象的,其他成员都不会占用对象的内存

小白博主还在学习中,若有错误请指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值