你在这里问了几个问题......
而不是删除内存我们将基于对象的重用获得什么样的好处?
这完全取决于您的申请.即使假设我知道应用程序是什么,你还没有指定另一个细节 - 你重复使用的策略是什么?但即使知道这一点,也很难预测或回答一般问题.尝试一些东西并测量它们.
根据经验,我喜欢尽量减少最无偿的分配.不过,这主要是过早的优化.它只会对成千上万的电话产生影响.
新的过程是什么?
完全依赖于实现.但是,分配器使用的一般策略是拥有一个空闲列表,即一个已在过程中释放的块列表.当空闲列表为空或包含不足的连续空闲空间时,它必须向内核询问内存,它只能以常量页面大小的块给出.(x86上的4096.)分配器还必须决定何时切断,填充或合并块.多线程也会对分配器施加压力,因为它们必须同步它们的空闲列表.
通常这是一个非常昂贵的操作.相对于你正在做的其他事情,可能没那么多.但它并不便宜.
是否发生了上下文切换?完全可能.它也有可能不会.你的操作系统可以在任何时候获得中断或系统调用时自由进行上下文切换,所以呃......这种情况很多时候都会发生; 我没有看到它和你的分配器之间有任何特殊的关系.
分配了新内存,谁在进行分配?OS?它可能来自空闲列表,在这种情况下不涉及系统调用,因此操作系统没有帮助.但如果空闲列表无法满足请求,它可能来自操作系统.此外,即使它来自空闲列表,您的内核可能已经分页了这些数据,因此您可能会在访问时出现页面错误,并且内核的分配器会启动.所以我想这将是一个混合包.当然,你可以有一个符合要求的实现,可以做各种疯狂的事情.
| 归档时间: |
|
| 查看次数: |
2140 次 |
| 最近记录: |