5.C++内存管理

5.C++内存管理,第1张

5.C++内存管理

目录

C/C++中内存分布

C++内存管理方式

operator new与operator delete函数(重点)

new和delete的实现原理


C/C++中内存分布

 说明:

1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。(编译器自动管理)
2. 堆用于程序运行时动态内存分配,堆是可以上增长的。(程序员自己管理)
3. 数据段--存储全局数据和静态数据。
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";
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);
}

C++内存管理方式

C语言使用malloc/calloc/realloc和free进行动态内存管理,那C++呢?

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

void Test()
{
  int* ptr4 = new int;
  int* ptr5 = new int(3);//这里3是初始化数值
  delete ptr4;
  delete ptr5;
  
  int* ptr6 = new int[3];//这里的3是数组对象个数
  delete[] ptr6;
}

注意:申请和释放单个元素的空间,使用new和delete *** 作符,申请和释放连续的空间,使用new[]和delete[]。

operator new与operator delete函数(重点)

new和delete是用户进行动态内存申请和释放的 *** 作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

new和delete的实现原理

new的原理
1. 调用operator new函数申请空间

2. 在申请的空间上执行构造函数,完成对象的构造


delete的原理
1. 在空间上执行析构函数,完成对象中资源的清理工作

2. 调用operator delete函数释放对象的空间

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4951149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存