Ale*_*aev 18 c++ asynchronous memory-management
我想知道对运营商的呼叫delete是否同步.换句话说,如果我这样做:
delete p;
C++标准是否保证只有在此调用完成执行后才释放内存?或者是调用是异步的,并且只要它决定最好的时间,它就会安排OS的任务释放这个内存吗?
如果第一种情况是有效的,那么它是否意味着我们必须实现我们自己的异步删除工具?我问,因为我会说大多数时候我们(程序员)不关心内存是否完全释放,因此我们不希望我们的代码冻结并等待这个(最有可能是昂贵的?)系统调用完成,而是安排删除任务并立即继续执行.C++是否提供任何标准功能(可能通过标准库?)来完成此操作而无需重新发明轮子?
没有什么能保证delete p;将内存释放回操作系统 - 永远.事实上,在很多(大多数?)实现中,它不会做任何类似的事情.
当你调用时确实发生了多少delete变化 - 在某些情况下它几乎是即时的(只是将块链接到空闲内存块列表).在其他情况下,它确实做了更多工作:销毁对象,并且可能搜索当前空闲列表中的相邻块,这些块可以与被释放的块合并.