C++内存分区管理

一、内存分区模型

代码区:存放代码,编译后的二进制文件也存放在这里。不允许修改,可以执行。

常量存储区:存放常量,也不允许修改,程序运行结束后会自动释放。

全局区:又叫静态存储区。存放全局变量、静态变量。

堆区:动态申请的内存空间。由程序员分配和释放,若程序员没有释放,程序结束后由操作系统回收。

栈区 :栈由编译器自动分配和释放,存放函数的参数值、局部变量等。

内存分区的意义:不同区域存放不同数据,赋予不同的生命周期。

二、代码实例

请结合代码注释理解

int main(int argc, char *argv[])
{
	static int stVar = 3;		//静态变量,在全局区

	string sVar = "hello C++"; //sVar:局部变量,在栈区; "hello C++":字符串常量,在常量存储区
	
	//pVar为指针变量,在栈区
	//pVar指向一个字符数组的首地址,这个字符数组是使用malloc(new也可以)在堆区开辟的连续的内存空间
	char *pVar = (char*)malloc(10);
	
	//我们可以使用把它们打印出来理解
	cout << "指针变量所在内存地址:" << (void*)&pVar << endl; //打印指针变量所在内存地址
	//打印pVar指向的字符数组各个元素的地址
	cout << "字符数组各元素所在内存地址:" << endl;
	for (int i=0; i < 10; ++i)
	{
		cout << (void*)&pVar[i] << " ";
	}
	free(pVar);

	system("pause");
	return 0;
}

输出:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值