为什么运算符"new"需要指针才能工作?

Why does operator "new" require a pointer to work?

本文关键字:工作 指针 运算符 new 为什么      更新时间:2023-10-16

我无法理解为什么通过new分配的堆栈中的内存只能通过指针访问,而堆中的内存(静态分配(可以正常访问。

这是否与堆中几乎所有内存都有某种顺序并且堆栈中的内存有些随机这一事实有关?(如果我刚才说的是真的。

动态记忆对我来说似乎如此模糊和神秘,所以任何能帮助我更好地理解它的人都会受到极大的赞赏。

为什么运算符"new"需要指针才能工作?

因为它在heap上分配内存块(大小由调用方指定(,并返回该分配块的开头address

我们为什么要使用它

  • 如果我们想要临时内存,我们正在使用它,因此我们可以轻松delete[]它。

  • 您可以轻松更改分配内存的大小(调整大小(。

    char arr[20]; // You need more space? Not possible to change size
    // While
    char * arr = new char[20];
    delete[] arr;
    arr = new char[50];
    

缺点

  • 使用new分配对象要昂贵得多。

  • 它更慢。

  • 内存泄漏的

  • 内存碎片

  • 必须是免费的delete[]

总结

Stack(automatic storage(更容易使用,更快,万无一失。但有时我们必须使用heap,我们应该尽可能小心。

看,在C++中,内存分为四个部分,即

  1. 程序代码
  2. 全局变量

现在,顾名思义,程序代码部分存储您的代码,全局变量部分存储全局变量。 这两部分非常清楚。

现在,我们关注的是堆栈内存和堆内存

堆栈内存是为静态实现保留的。

堆内存是为动态实现保留的。

堆栈内存中的变量在编译期间分配。 但是堆内存中的变量是在运行时分配的,因为它在运行时分配,我们不能将其作为普通变量进行处理。

在这里,我们需要指针,因为我们需要一些东西来引用我们在动态分配期间获得的内存。这项工作由指针完成。