C++ 什么是内存管理

C++ 什么是内存管理

内存管理是一种管理计算机内存的过程,将内存空间分配给程序以提高整体系统性能。

为什么需要内存管理

我们知道数组存储的是同类数据,所以大多数情况下,在声明时会为数组分配内存空间。有时会出现在运行时才能确定确切内存大小的情况。为了避免这种情况,我们以最大尺寸声明一个数组,但其中一些内存将不会被使用。为了避免内存浪费,我们使用new运算符在运行时动态分配内存。

内存管理运算符

在C语言中,我们使用malloc()或calloc()函数在运行时动态分配内存,使用free()函数释放动态分配的内存。C++也支持这些函数,但同时还定义了一元运算符如new和delete来执行相同任务,即分配和释放内存。

new运算符

new运算符用于创建对象,而delete运算符用于删除对象。当使用new运算符创建对象时,该对象将存在直到我们显式使用delete运算符删除对象。因此,我们可以说对象的生命周期与程序的块结构无关。

语法

pointer_variable = new data-type

以上的语法是使用new运算符创建对象。在上述的语法中, ‘pointer_variable’ 是指针变量的名称, ‘new’ 是运算符,而 ‘data-type’ 则定义了数据的类型。

示例1:

int *p;
p = new int;

在上面的示例中,’p’是一个类型为int的指针。

示例2:

float *q; 
q = new float;

在上面的例子中,’q’是一个类型为float的指针。 在上面的情况下,指针的声明和赋值是分开完成的。我们也可以将这两个语句合并如下:

int *p = new int;
float *q =   new float;

为新创建的对象赋值

两种为新创建的对象赋值的方式:

  • 我们可以通过使用赋值运算符来将值赋给新创建的对象。在上述情况中,我们分别创建了两个指针’p’和’q’,它们的类型分别为int和float。现在,我们按照以下方式赋值:
*p = 45;
*q = 9.8;

我们将45分配给新创建的int对象,将9.8分配给新创建的float对象。

  • 我们还可以使用new运算符进行赋值,操作如下:
pointer_variable = new data-type(value);

让我们看一些例子。

int *p = new int(45);
float *p = new float(9.8);

如何创建一维数组

正如我们所知,new运算符用于为任何数据类型或用户定义的数据类型(如数组、结构体、联合等)创建内存空间,因此创建一维数组的语法如下所示:

pointer-variable = new data-type[size];

示例

int *a1 = new int[8];

在上面的语句中,我们已经创建了一个大小为8的int类型的数组,其中p[0]指的是第一个元素,p[1]指的是第一个元素,依此类推。

删除运算符

当不再需要内存时,需要将其释放,以便可以将内存用于其他目的。可以通过使用delete运算符来实现,如下所示:

delete pointer_variable; 

在上述语句中, ‘delete’ 是用于删除现有对象的运算符,而 ‘pointer_variable’ 是指针变量的名称。

在前面的例子中,我们使用new运算符创建了两个指针’p’和’q’,可以通过以下语句来删除它们:

delete p;
delete q;

可以使用下面的语法将动态分配的数组从内存空间中删除:

delete [size] pointer_variable; 

在上述语句中,我们需要指定定义需要释放的元素数量的大小。这种语法的缺点是我们需要记住数组的大小。但是,在最新的C++版本中,我们不需要像下面这样提及大小:

delete [ ] pointer_variable; 

通过一个简单的例子来了解:

#include <iostream>
using namespace std
int main()
{
int size;  // variable declaration
int *arr = new int[size];   // creating an array 
cout<<"Enter the size of the array : ";   
std::cin >> size;    // 
cout<<"\nEnter the element : ";
for(int i=0;i<size;i++)   // for loop
{
cin>>arr[i];
}
cout<<"\nThe elements that you have entered are :";
for(int i=0;i<size;i++)    // for loop
{
cout<<arr[i]<<",";
}
delete arr;  // deleting an existing array.
return 0;
}

在上述代码中,我们使用new操作符创建了一个数组。上述程序将在运行时接受用户对数组大小的输入。当程序完成所有操作后,通过使用语句 delete arr ,然后删除对象。

输出

C++ 什么是内存管理

新的运算符的优势

以下是新的运算符比malloc()函数的优势:

  • 它不使用sizeof()运算符,因为它会自动计算数据对象的大小。
  • 它会自动返回正确的数据类型指针,因此不需要使用类型转换。
  • 像其他运算符一样,新的和删除的运算符也可以重载。
  • 它还允许您在创建对象的内存空间时初始化数据对象。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程