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



上下文:(从这个问题中减少stl向量的容量(

有没有办法降低向量的容量

我的代码将值插入到向量中(不知道它们的数字事先(,并且当完成时,矢量仅用于读取操作。。。

这个答案:https://stackoverflow.com/a/1111311/11608725,带有(c++(shrink_to_fit()https://en.cppreference.com/w/cpp/container/vector/shrink_to_fit似乎提供了OP的要求。

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

c++(11/17(标准是否强制/保证了行为,还是完全取决于编译器和特定操作系统上的实现?

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

  • 告诉进程释放内存的某种方法(全部规则(
    • 一些信号和处理程序或事件
  • 知道哪些对象要释放内存的某种方法(找到它们,把它们都带来(
    • 每个寄存器的某个位置,以便信号或事件可以调用它们
  • 有些方法可以确保线程安全(并在黑暗中绑定它们(
    • 一个事件将被所有协作对象很好地处理
    • 信号是一种中断,你不想走那个条路

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

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

最新更新