当前位置:   article > 正文

【C++内存管理】看这一篇就足够啦!_内存管理c++

内存管理c++

一、C/C++内存分布

话不多说,咱们直接上题目!在这里插入图片描述

请看下面代码:

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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述

答案:C C C A A

  • 全局变量和静态变量放在静态区
  • 局部变量再栈

答案:A A A D A B

在这里插入图片描述


二、C++内存管理方式

通过new和delete操作符进行动态内存管理。

在这里插入图片描述

1. new/delete操作内置类型

void Test()
{
  // 动态申请一个int类型的空间
  int* ptr4 = new int;
  
  // 动态申请一个int类型的空间并初始化为10
  int* ptr5 = new int(10);
  
  // 动态申请10个int类型的空间
  int* ptr6 = new int[3];
  delete ptr4;
  delete ptr5;
  delete[] ptr6;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述
除了用法,和 c语言的 malloc 没什么区别

2. new和delete操作自定义类型

在这里插入图片描述

★我们先自定义一个类型A

class A
{
public:
	A(int a = 0)
		: _a(a)
	{
		cout << "A():" << this << endl;
		
	}
	~A()
	{
		cout << "~A():" << this << endl;
	}
private:
	int _a;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/1015254
推荐阅读
相关标签