【问题标题】:C++ Heap and Stack Memory ( memory managment )C++ 堆和栈内存(内存管理)
【发布时间】:2020-10-10 15:33:02
【问题描述】:

所以目前我一直在使用指针,现在我知道如何使用它们以及它们在哪里赚钱,但仍然有一个问题一直困扰着我。为什么我要一些东西在 Heap 和一些在 Stack 中?

当我们声明一个指针时,变量和地址都留在堆栈中,但具体的指针地址指向了该值。好的,但我为什么要这样做?为什么我不应该只声明一个普通变量?什么时候必须使用动态内存分配?

【问题讨论】:

    标签: c++ pointers stack heap-memory


    【解决方案1】:

    堆内存“存在”直到您调用delete(或delete[]),堆栈内存只存在直到您退出声明它的范围。这就是区别。

    【讨论】:

    • 好的,所以目的是我可以在超出范围之前释放内存,这样更快吗?
    • 不,关键是当内存超出范围时,您不必释放内存。
    • 堆栈分配更快。
    • 堆分配的内存在任何情况下都不会自动释放。即使指向内存的指针超出范围,内存仍保持分配状态。您决定(通过调用 delete)何时释放内存。
    • 默认情况下,堆栈通常也非常小,而堆很大,并且可以大于使用虚拟内存的操作系统上的物理内存量。在 Visual Studio 上,默认堆栈大小为 1MB,其他编译器的默认值可能高达 10 倍。
    【解决方案2】:

    嗯,这完全取决于您和您的应用程序。

    堆栈的使用 如果您确切知道在编译时需要分配多少数据并且它不太大,您会使用堆栈。

    堆的使用: 如果您不知道运行时需要多少数据或需要分配大量数据,则可以使用堆。

    你也可以参考下面的链接更详细

    What and where are the stack and heap?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2011-09-16
      • 2018-02-17
      • 2015-09-28
      相关资源
      最近更新 更多