gpt4 book ai didi

C++ 内存管理和 vector

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:52 25 4
gpt4 key购买 nike

我对与 vector 相关的内存管理感到非常困惑,可以解释一些基本概念。

我有一个使用大 vector 的程序。我使用 new 运算符创建 vector ,并在程序结束时使用 delete 释放它们以获得内存恢复。

我的问题是,如果程序因任何原因崩溃或中止,delete 行将丢失,有没有办法恢复内存,即使在这种情况。

我还分配了一些其他大 vector ,但没有使用 new 关键字。我已经读到,这些将在堆上创建,但无论如何都不需要释放,因为内存管理是在“幕后”处理的。但是我不确定是不是这种情况,因为每次我运行程序时都会丢失 RAM。

所以我的第二个问题是,如果不使用 new 关键字创建的 vector 是否真的可以留给它们自己的设备使用,并且即使代码在中途中止也可以相信它们会自行清除流。

我想我刚刚想到的第三个问题是,如果 Vectors 是在堆上自动创建的,为什么要对它们使用 new 关键字?谢谢阅读,本

最佳答案

我怀疑您的问题是关于 std::vector< T >(而不是数组 T[])。

  1. 当您的应用程序因任何原因崩溃或中止时,操作系统会回收内存。否则,您正在使用真正罕见的操作系统并发现了一个错误。
  2. 你需要区分 vector 本身使用的内存和它包含的对象的内存。如您所述,可以在堆上或堆栈上创建 vector ,它为其包含的元素分配的内存始终在堆上(除非您提供自己的分配器来执行其他操作)。 vector 分配的内存由 vector 的实现管理,如果 vector 被析构(因为它超出了堆栈上 vector 的范围或因为你删除了堆上的 vector),它的析构函数确保所有释放内存。

关于C++ 内存管理和 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com