C++内存分区

一.内存分区的意义

不同分区的数据具有不同的生命周期,可以给编程更大的灵活性;

二.四大分区

1.栈

非静态局部变量,函数参数,返回值等

存在于栈空间变量的特点

不需要手动进行内存的开辟和空间的释放,由栈自动分配和释放空间。

2.堆(自由存储区)

动态开辟的内存空间

3.数据段(全局区)

全局变量和static修饰的静态变量

4.代码段

存放函数体的二进制代码,只读常量(如字符串常量)

三.代码演示各个分区的变量

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

int globalVar = 1;			//globalVar:全局变量,存放在数据段
static int staticGlobalVar = 1;			//staticGlobalVar:静态变量,存放在数据段
void Test()
{
	static int staticVar = 1;			//staticVar:静态变量,存放在数据段
	int localVar = 1;					//localVar:非静态局部变量,存放在栈中

	int num1[10] = { 1, 2, 3, 4 };		//num1:非静态局部变量,存放在栈中
	//char2:数组,非静态局部变量,存放在栈中
	//*char2:存放在栈中,将char2看作指针,*char2指向"abcd"这个字符串
	//下面的语句定义了一个char2数组,将字符串"abcd"的值拷贝到char2数组中,
	//*char2指向的这个字符串就等同于一个普通的局部变量(匿名对象),局部变量存放在栈上
	char char2[] = "abcd";			
	//pChar3:非静态局部变量,存放在栈中  *pChar3:字符串常量,存放在代码段
	char* pChar3 = "abcd";	
	//ptr1:指针,非静态局部变量,存放在栈中    *ptr1:动态开辟的空间,存放在堆中
	int* ptr1 = (int*)malloc(sizeof (int)* 4);
	//ptr2:指针,非静态局部变量,存放在栈中    *ptr2:动态开辟的空间,存放在堆中
	int* ptr2 = (int*)calloc(4, sizeof(int));
	//ptr3:指针,非静态局部变量,存放在栈中    *ptr3:动态开辟的空间,存放在堆中
	int* ptr3 = (int*)realloc(ptr2, sizeof(int)* 8);
	free(ptr1);
	free(ptr3);
}

void main()
{
	Test();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值