C/C++ --- 内存分布

C/C++的内存分布

C/C++的内存分布主要分成四个区:栈区,堆区,静态区(数据段),常量区(代码段)。
后两种括号中的称呼是从操作系统角度出发的。

1.栈区

栈区内存主要存储的是局部变量,局部变量的生命周期仅在所处函数栈帧中。

2.堆区

堆区内存主要存储的是我们动态申请的内存,如malloc、calloc、realloc,或者new动态申请的对象。

3.静态区

静态区主要存储的是全局变量,或者static修饰的变量、函数。

4.常量区

常量区就是存储的是常量,以及一些指令。

例题:

int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
	static int staticVar = 1;
	int localVar = 1;
	int num1[10] = { 1, 2, 3, 4 };
	char char2[] = "abcd";
	const char* pChar3 = "abcd";
	int* ptr1 = (int*)malloc(sizeof(int) * 4);
	int* ptr2 = (int*)calloc(4, sizeof(int));
	int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);
	free(ptr1);
	free(ptr3);
}

变量globalVar分布于静态区,是一个全局变量。
变量staticGlobalVar分布于静态区,是一个全局变量。
变量staticVar分布于静态区,由于在函数内部被static修饰了。
变量localVar分布于栈区,是一个局部变量。
数组num1分布于栈区,是一个局部变量。
数组char2分布于栈区,是一个局部变量。
*char2分布于栈区,char2是数组名,数组名是数组首元素的地址,对其解引用那就是元素a。
变量pChar3分布于栈区,此变量被const修饰,并且在星号的左边,修饰的是变量pChar3指向的内容,本身依旧还是一个局部变量。
星号pChar3分布于常量区,表示的是其指向常量区的abcd字符串。
变量ptr1分布于栈区,它是一个指针变量,本身是一个局部变量。
变量星号ptr1分布于堆区,*ptr就是对变量ptr1的解引用,其内容是指向堆区的一块空间。
后面的ptr2,ptr3也是分布于栈区,*ptr2,*ptr也是分布于堆区,道理同ptr1,*ptr1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值