gpt4 book ai didi

c++ - 为什么我应该使用新的展示位置?

转载 作者:IT老高 更新时间:2023-10-28 23:17:33 26 4
gpt4 key购买 nike

看起来,placement new 在预分配的内存上创建了一个新对象,这是否意味着它会花费更少的时间?看起来它比使用旧的普通 new 分配更快。那么,既然这样方便快捷,为什么不一直使用placement new呢?

最佳答案

normal(nonplacement)new基本上相当于做

T* ptr = static_cast<T*>(malloc(sizeof(T)));
new(ptr) T;

当然,由于错误检查等原因,现实看起来有点不同,但结果或多或少是相同的(通过不完全相同,您不能 delete 以这种方式分配的指针,而是您需要显式调用析构函数(ptr->~T()),然后使用 free 释放内存。

因此,placement new 确实应该比 nonplacement new 更快,因为它不需要分配内存。然而问题是内存需要分配到某个地方。因此,您实际上已经用对 placement new 的调用和一些用于在某处分配的代码替换了对 new 的调用(如果不是,为什么要使用 new 首先?)。很明显,这不太方便并且更容易出错。

现在您当然可以编写一种更快的分配方法,但为此您通常需要进行某种权衡。如果不使用更多内存(用于更快识别空闲 block 的额外数据)或使其非常具体(编写单个对象大小的快速分配比一般对象大小更容易),编写一个更快的分配器并不容易。最后,通常不值得付出努力(对于值得付出努力的场景,它可能已经完成,因此您可以使用现有的分配器(可能在内部使用新的位置)。

当然有用于放置 new 的用途(有时您确实预先分配了内存),但这根本不是常见的情况

关于c++ - 为什么我应该使用新的展示位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com