C++成员函数的内存分配问题

本文详细解析了C++中非静态成员函数与静态成员函数的本质区别,包括它们在代码区的位置、函数定义位置、以及如何在类对象中使用。同时,文章还展示了静态成员变量与非静态成员变量的不同存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


转自:http://blog.youkuaiyun.com/caomiao2006/article/details/4934013
1、所有函数代码都在程序编译连接时放在一块,称为代码区,无论是静态还是非静态函数都一样,不存在 "构造一个类的对象(第一次构造对象)时,就会给成员函数(非静态成员函数)分配代码区空间 ",而是程序加载时,所有的代码已在内存空间存在.   只有函数中用到的局部变量才是函数调用时分配空间.
 
2、静态成员函数和成员函数之间根本的区别是:静态成员函数实际上是一个全局函数,不依赖一个类的对象.函数定义时之所以把静态成员函数定义在类中,是一种弱逻辑.     普通成员函数依赖一个类的对象,也就是它有this指针,必须指向一个类的对象.也可以把普通成员函数看做一个普通的函数,在对象调用此函数时,会把对象的this指针当成参数传入到这个函数。
 
3、建立类的对象时只是给成员变量分配空间,析构时也只回收这些空间,代码段里的函数以及静态函数和变量都是在程序结束后回收。
类的静态成员变量只存一份,所以一个类对象的内存中不包含静态成员变量



class base
{
public:	
	int a;
	static char c;
	static void fun()
	{
		cout<<"a"<<endl;
	}
	virtual void Print()
	{
		cout<<"in base print\n";
	}
};

class base1
{
public:
	int a;
	char c;
	static void fun()
	{
		cout<<"a"<<endl;
	}
	virtual void Print()
	{
		cout<<"in base print\n";
	}

};



cout<<sizeof(base)<< " "<<sizeof(base1)<<endl;

output: 8 12




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值