Tips:本篇主要以C++的内存管理为例‘’

本博客只是粗略讲解,具体的对于内存的信息可以去数据结构相关博客找哦。

  1. 内存

在计算机中,每个应用程序之间的内存是相互独立的,通常情况下应用程序A并不能访问应用程序B,每个应用程序所拥有的内存是分区进行管理的

关于C++内存管理的初步认识_应用程序

  1. 内存四区:

在程序 A 开辟的内存区域 1 会被分为几个区域,这就是内存四区,内存四区分为栈区、堆区、数据区与代码区。

关于C++内存管理的初步认识_c++_02

关于C++内存管理的初步认识_其他_03

  • 栈区指的是存储一些临时变量的区域,临时变量包括了局部变量、返回值、参数、返回地址等,当这些变量超出了当前作用域时将会自动弹出。该栈的最大存储是有大小的,该值固定,超过该大小将会造成栈溢出。
  • 堆区指的是一个比较大的内存空间,主要用于对动态内存的分配;在程序开发中一般是开发人员进行分配与释放,若在程序结束时都未释放,系统将会自动进行回收。
  • 数据区指的是主要存放全局变量、常量和静态变量的区域,数据区又可以进行划分,分为全局区与静态区。全局变量与静态变量将会存放至该区域。
  • 代码区就比较好理解了,主要是存储可执行代码,该区域的属性是只读的。
  1. new和delete

数组的长度是预先定义好的,在整个程序中固定不变,C++不允许元素个数不确定是数组,例如

int n;int arr[n];

但在实际的编程中,往往会出现所需的内存空间大小取决于实际要处理的数据多少,而实际要处理的数据数量在编程时无法确定的情况,如果总是定义一个尽可能大的数组,又可能造成空间浪费,为了解决上述问题,C++提供了一种"动态内存分布"机制,使得根据实际需求分配空间。此种内存分配是在程序中运行的,而不是编译时就确定的,因此被称为"动态内存分配"。

  1. 在C++中,通过new运算符实现动态内存分配

语法:int *p = new T;orT *p = new T[N];

  1. 释放内存,delete

语法:delete p;ordelete[] p;

叙述:p指的是动态分配的内存的指针,p必须指向动态分配的内存空间,否则运行时很可能会出错。

// 第一种定义和释放方式:可以分配出sizeof(T)的空间
int *p = new T;
delete p;
// 第二种定义和释放方式:可以分配出N*sizeof(T)的空间
T *p = new T[N];
delete[] p;