从内存四区的角度来理解C++中的类

版权声明:转载请注明作者和出处。 https://blog.csdn.net/LQMIKU/article/details/79070135

从内存四区的角度来理解C++中的类

  • 结论
  • 试验

阅读之前注意:

本文阅读建议用时:14min
本文阅读结构如下表:

项目 下属项目 测试用例数量
结论 0
试验 1

结论

先给出内存四区的概念:堆区、栈区、全局区、代码区。详情可自行搜索,此处不作赘述。

C++类中对象的成员变量和成员函数是分开存储的。
普通成员变量:存储于对象(栈区或堆区)中,与struct变量有相同的内存布局和字节对齐方式(会补齐);
静态成员变量:存储于全局区。
成员函数:存储于代码区。

而当很多的对象共用同一块代码时,是通过this指针来区分不同的对象1
无论语言怎么变,它们在内存上的基础都是一样的。

试验

我们通过以下程序来测试。
参考以下代码:

#include "iostream"

using namespace std;

class C1
{
public:
    int i; //4 
    int j; //4
    int k; //4
protected:
private:
}; //12

class C2
{
public:
    int i; //4
    int j; //4
    int k; //4

    static int m; //4
public:
    int getK() const { return k; } //4
    void setK(int val) { k = val; } //4

protected:
private:
}; //24  16 ?

struct S1
{
    int i;
    int j;
    int k;
}; //12

struct S2
{
    int i;
    int j;
    int k;
    static int m;
}; //16?

int main()
{
    printf("c1:%d \n", sizeof(C1));
    printf("c2:%d \n", sizeof(C2));
    printf("s1:%d \n", sizeof(S1));
    printf("s2:%d \n", sizeof(S2));

    system("pause");
}

试着运行以上程序,我们就能体会到成员变量、成员函数在内存中的分布了2


  1. 结论基于王保明先生的讲课内容
  2. 测试程序来源于王保明先生的讲课内容

猜你喜欢

转载自blog.csdn.net/LQMIKU/article/details/79070135
今日推荐