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

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

996.icu LICENSE

  • 结论
  • 试验

阅读之前注意:

本文阅读建议用时: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. 测试程序来源于王保明先生的讲课内容 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值