C++ 什么是动态内存分配?

C++ 什么是动态内存分配?

资源始终是有限的。我们一直在努力实现更好的资源利用率,这是我们进步的前提。与这种追求相关的是内存分配的概念。

必须将内存分配给我们创建的变量,以便实际的变量可以存在。现在存在着思维方式与实际发生情况之间的差异。

计算机如何创建变量?

当我们想要创建一些东西时,我们认为要从头开始创建,但事实并非如此,当计算机创建变量“X”时,它更像是一种分配,计算机只是将一个存储单元从众多现有的存储单元中分配给X。这就像有人取名为’RAJESH’从很多可用的或空闲的现有房间中分配了一间酒店房间。这个例子很清楚地说明了计算机如何分配内存。
现在,什么是 静态内存分配 ? 当我们声明变量时,我们实际上是准备使用的所有变量,以便编译器知道正在使用的变量实际上是用户想要的程序的重要部分,而不仅仅是游离的符号。因此,当我们声明变量时,编译器实际上会将这些变量分配给它们的房间(参考前面的酒店类比)。现在,如果你看一下,这是在程序执行之前完成的,你无法使用此方法在程序执行时分配变量。

//以下程序中的所有变量
//都是静态分配的。
void fun()
{
   int a;
}
int main()
{
   int b;
   int c[10]
}  

为什么我们需要引入另一种分配方法,如果只是完成工作? 为什么需要在程序运行时分配内存?因为即使它不是明显可见的,不能在运行时分配内存会排除灵活性,并且会妥协空间效率。特别是那些输入未知的情况下,我们在存储使用效率低下以及缺乏或过多的插槽以输入数据(给定数组或类似的数据结构来存储条目)方面受到影响。因此,这里我们定义动态内存分配: 在运行时分配存储/内存/存储单元给变量的机制称为动态内存分配(不要与 DMA 混淆)。 因此,正如我们一直在进行的一样,它会在运行时分配内存,这使我们可以使用尽可能多的存储空间,而不必担心任何浪费。

动态内存分配是在执行时间或运行时间分配内存空间的过程。

分配内存的原因和优势:

  1. 程序需要使用的内存量事先无法确定。
  2. 需要数据结构而不受内存空间上限的限制。
  3. 想要更有效地使用内存空间。 示例: 如果您为一维数组分配了内存空间,如array[20],但最终仅使用了10个内存空间,则剩余的10个内存空间将被浪费,这种浪费的内存甚至无法被其他程序变量利用。
  4. 利用地址进行动态创建列表的插入和删除非常容易,而在静态分配的内存中,插入和删除会导致更多的移动和浪费内存。
  5. 在编程中使用结构和链表的概念,必须使用动态内存分配。
int main()
{
//以下变量动态分配内存
int* ptr1 = new int;
int* ptr2 = new int[10];

//释放动态分配的内存
delete ptr1;
delete[] ptr2;
}  

有两种可用的内存-堆栈和堆。 静态内存分配只能在堆栈上进行,而动态内存分配可以在堆栈和堆上进行。动态分配在堆栈上的示例是递归,其中按照它们出现的顺序将函数放入调用栈中,并在达到基本情况时依次弹出。在堆上进行的动态内存分配示例包括:

int main()
{
//以下变量动态在堆上分配内存
int* ptr1 = new int;
int* ptr2 = new int[10];

//释放动态分配的内存
delete ptr1;
delete[] ptr2;
}  

在堆上分配内存时,我们需要手动删除内存,因为即使分配的内存作用域结束(如在堆栈中的情况),编译器也不会自行释放(解分配)内存。

总结上述主题,静态内存是编译器预先分配的内容,而动态内存是在程序执行期间由程序控制的内容。程序可能会要求更多内存,也可能删除某些分配的内存。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程