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 你不确定对象当前是否正在更新其分配的内存,因此需要有一些互斥锁,类似的无锁操作。
上下文:(来自这个问题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 你不确定对象当前是否正在更新其分配的内存,因此需要有一些互斥锁,类似的无锁操作。