c ++:进程可以自动回收stl对象上多余的分配内存吗?

c++ : can process automatically reclaim excess allocated memory on stl objects?

上下文:(来自这个问题reduce the capacity of an stl vector

Is there a way to reduce the capacity of a vector ?

My code inserts values into a vector (not knowing their number beforehand), and when this finishes, the vectors are used only for read operations. ...

这个答案:, with the (c++) shrink_to_fit() https://en.cppreference.com/w/cpp/container/vector/shrink_to_fit 似乎提供了 OP 要求的内容。

问题:除了“手动”[例如通过 shrink_to_fit()] 回收多余的分配内存; 运行 进程是否能够在需要时自动回收此内存? 还是只要导致分配的对象持续存在,内存就会永远丢失?

c++ (11/17) 标准 impose/guarantee 行为还是完全取决于特定 OS 上的编译器和实现?

让我们考虑一下实现类似的东西需要什么。

  • 一些告诉进程释放内存的方法(统治他们)
    • 一些信号和处理程序或事件。
  • 一些知道哪些对象要释放内存的方法(全部找到,全部带上)
    • 每个都在某处注册,以便它们可以被信号或事件调用
  • 一些线程安全的方法(并在黑暗中绑定它们)
    • 一个事件将由所有协作对象很好地处理。
    • signal 是一种中断,你不会想要那样做的。

所以你需要一个合作的系统,如果他们没有真正合作在系统需要时释放内存,这是一个问题,要么是因为他们很忙,要么没有实现所需的代码。

如果你转到另一条路径,使用 signals/interrupts 你不确定对象当前是否正在更新其分配的内存,因此需要有一些互斥锁,类似的无锁操作。